亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL遠程訪問設(shè)置終極方法

 更新時間:2014年12月02日 12:02:06   投稿:junjie  
這篇文章主要介紹了MySQL遠程訪問設(shè)置終極方法,本文總結(jié)了多種設(shè)置方法和技巧,是解決遠程訪問的終極解決方案,需要的朋友可以參考下

數(shù)據(jù)庫對于服務(wù)端開發(fā)人員來說,幾乎就是左膀右臂。幾乎每一個服務(wù)端開發(fā)人員都要和數(shù)據(jù)庫打交道。而MySQL又以其開源免費,小巧玲瓏,簡單易用,功能強大占據(jù)中國數(shù)據(jù)庫使用份額的半壁江山。從去年接觸到Vagrant以來,Vagrant以其方便易用深深吸引了D瓜哥。為了盡可能地和生產(chǎn)環(huán)境保持盡可能的一致性,減少不必要的問題的發(fā)生,Vagrant+Ubuntu+MySQL幾乎是絕配。

MySQL允許遠程訪問的設(shè)置

1.注釋bind-address = 127.0.0.1。

復(fù)制代碼 代碼如下:

>cd /etc/mysql
>sudo vim my.cnf

將bind-address = 127.0.0.1注釋掉(即在行首加#),如下:

復(fù)制代碼 代碼如下:

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address          = 127.0.0.1

除了注視掉這句話之外,還可以把后面的IP地址修改成允許連接的IP地址。但是,如果只是開發(fā)用的數(shù)據(jù)庫,為了方便起見,還是推薦直接注釋掉。

從上面的注釋中,可以看出,舊版本的MySQL(從一些資料上顯示是5.0及其以前的版本)上使用的是skip-networking。所以,善意提醒一下,使用舊版本的小伙伴請注意一下。

2.刪除匿名用戶

登錄進數(shù)據(jù)庫:

復(fù)制代碼 代碼如下:

>mysql -uroot -p123456

然后,切換到數(shù)據(jù)庫mysql。SQL如下:
復(fù)制代碼 代碼如下:

use mysql;

然后,刪除匿名用戶。SQL如下:
復(fù)制代碼 代碼如下:

delete from user where user='';

3.增加允許遠程訪問的用戶或者允許現(xiàn)有用戶的遠程訪問。

接著上面,刪除匿名用戶后,給root授予在任意主機(%)訪問任意數(shù)據(jù)庫的所有權(quán)限。SQL語句如下:

復(fù)制代碼 代碼如下:

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

如果需要指定訪問主機,可以把%替換為主機的IP或者主機名。另外,這種方法會在數(shù)據(jù)庫mysql的表user中,增加一條記錄。如果不想增加記錄,只是想把某個已存在的用戶(例如root)修改成允許遠程主機訪問,則可以使用如下SQL來完成:
復(fù)制代碼 代碼如下:

update user set host='%' where user='root' and host='localhost';

4.退出數(shù)據(jù)庫

復(fù)制代碼 代碼如下:

mysql> exit

在MySQL Shell執(zhí)行完SQL后,需要退出到Bash執(zhí)行系統(tǒng)命令,需要執(zhí)行exit。因為這個太常用也太簡單。以下內(nèi)容就提示“退出”,不再重復(fù)列出這個命令。

5.重啟數(shù)據(jù)庫

完成上述所有步驟后,需要重啟一下數(shù)據(jù)庫,才能讓修改的配置生效。執(zhí)行如下命令重啟數(shù)據(jù)庫:

復(fù)制代碼 代碼如下:

>sudo service mysql restart

到此為止,應(yīng)該就可以遠程訪問數(shù)據(jù)庫了。

當(dāng)然,“雄關(guān)漫道真如鐵”,世界并不是想象的那么圖樣圖森破,可能還會遇到一些問題,影響到正常使用。下面,D瓜哥把自己遇到的一些問題整理處理,方便各位朋友參考解決。(退一步講,沒有這些問題來撐門面,D瓜哥該叫“終極解決辦法”嗎?!哈哈)

常見問題解答

華仔說的好啊,“出來混的都是要還的”。對于我們從事挨踢行業(yè)的小伙伴來說,“出來混的都是從問題堆里走的”。馮鞏也說的好,“作為北京人,兜里沒揣兩千塊錢都不好意思給別人打招呼”。D瓜哥想,對于干挨踢的小伙伴們來說,沒遇到過問題,都不好意思說自己是干挨踢的。所以,對于一些常見的問題,或者說是常用操作可能引發(fā)的問題來說,有必要整理一下,方便以后隨時查閱使用。

ERROR 1045 (28000)錯誤的原因以及解決辦法

復(fù)制代碼 代碼如下:

>mysql -uroot -p123456
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

如果沒有按照上面流程,刪除匿名用戶,再或者你是按照網(wǎng)上查的資料來進行設(shè)置(大多都沒有“刪除匿名用戶”這步),都可能導(dǎo)致這個問題。至于這個問題的原因說起來,D瓜哥感覺“怪怪”的。要說清楚這個原因,還得從MySQL數(shù)據(jù)庫的用戶認證機制說起。

MySQL中,用戶相關(guān)的信息存在數(shù)據(jù)庫mysql的user。然我們看一下該表的結(jié)構(gòu),命令以及返回值如下:

復(fù)制代碼 代碼如下:

mysql> desc user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
| Password               | char(41)                          | NO   |     |         |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N       |       |
| File_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N       |       |
| References_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher             | blob                              | NO   |     | NULL    |       |
| x509_issuer            | blob                              | NO   |     | NULL    |       |
| x509_subject           | blob                              | NO   |     | NULL    |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0       |       |
| plugin                 | char(64)                          | YES  |     |         |       |
| authentication_string  | text                              | YES  |     | NULL    |       |
| password_expired       | enum('N','Y')                     | NO   |     | N       |       |
+------------------------+-----------------------------------+------+-----+---------+-------+
43 rows in set (0.00 sec)

或者查看一下該表的建表語句。命令如下:

復(fù)制代碼 代碼如下:

mysql> show create table user;

由于返回值中摻雜了一些不必要的無用信息,為了方便大家查看,D瓜哥對返回值做了簡單的處理,只把最主要的建表語句部分提取出來。如下:

復(fù)制代碼 代碼如下:

CREATE TABLE `user` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
  `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `ssl_cipher` blob NOT NULL,
  `x509_issuer` blob NOT NULL,
  `x509_subject` blob NOT NULL,
  `max_questions` int(11) unsigned NOT NULL DEFAULT '0',
  `max_updates` int(11) unsigned NOT NULL DEFAULT '0',
  `max_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `plugin` char(64) COLLATE utf8_bin DEFAULT '',
  `authentication_string` text COLLATE utf8_bin,
  `password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'

從上面兩個方法中的任何一個都可以看出,MySQL中,使用(Host, User)這樣的組合鍵作為主鍵,也就是標(biāo)識唯一一個用戶。換句話說,即使對于同一個用戶名,例如root,隨著host的不同,也表示不同的用戶,就可以由不同的密碼和權(quán)限。這是,我們可以查看一下該表內(nèi)的數(shù)據(jù)。SQL以及返回值如下:

復(fù)制代碼 代碼如下:

mysql> select user, host, password from user;
+------------------+--------------------------+-------------------------------------------+
| user             | host                     | password                                  |
+------------------+--------------------------+-------------------------------------------+
| root             | %                        | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root             | vagrant-ubuntu-trusty-64 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root             | 127.0.0.1                | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root             | ::1                      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|                  | localhost                |                                           |
|                  | vagrant-ubuntu-trusty-64 |                                           |
| debian-sys-maint | localhost                | *9B8E84CA988E1CA66CEB919A0D9D3BF1532942B6 |
+------------------+--------------------------+-------------------------------------------+
7 rows in set (0.00 sec)


可以看到數(shù)據(jù)庫中有如上這些用戶。那么,如果有'root'@'localhost'登錄時,怎么匹配呢?

根據(jù)MySQL官方文檔MySQL :: MySQL 5.6 Reference Manual :: 6.2.4 Access Control, Stage 1: Connection Verification里是如下面這樣說的:

復(fù)制代碼 代碼如下:

When multiple matches are possible, the server must determine which of them to use. It resolves this issue as follows:

Whenever the server reads the user table into memory, it sorts the rows.

When a client attempts to connect, the server looks through the rows in sorted order.

The server uses the first row that matches the client host name and user name.

The server uses sorting rules that order rows with the most-specific Host values first. Literal host names and IP addresses are the most specific. (The specificity of a literal IP address is not affected by whether it has a netmask, so 192.168.1.13 and 192.168.1.0/255.255.255.0 are considered equally specific.) The pattern ‘%' means “any host” and is least specific. The empty string ” also means “any host” but sorts after ‘%'. Rows with the same Host value are ordered with the most-specific User values first (a blank User value means “any user” and is least specific).

請注意這句話:“The server uses sorting rules that order rows with the most-specific Host values first. Literal host names and IP addresses are the most specific.”

那么,當(dāng)從本地連接到數(shù)據(jù)庫時,匿名用戶將覆蓋其他如'[any_username]'@'%'之類的用戶。具體匹配過程如下:

在'root'@'localhost'可以匹配'root'@'%',''也可以匹配root,那么'root'@'localhost'也可以匹配''@'localhost'。根據(jù)上面的文檔顯示,主機(host)有比用戶名稱user更高的匹配優(yōu)先級,則localhost比%有比更高的匹配優(yōu)先級。所以,''@'localhost'比'root'@'%'匹配優(yōu)先級更高,'root'@'localhost'就匹配到了''@'localhost'。根據(jù)我們上面的查詢結(jié)果來看,''@'localhost'的密碼為空,與登錄時提供的密碼123456不匹配。所以,就登錄失敗了。

說到這里,想必大家已經(jīng)想到了解決方案:很簡單,直接把匿名用戶刪掉就可以了。

但是,現(xiàn)在的問題時,在本地根本登錄不上數(shù)據(jù)庫,更別扯刪除數(shù)據(jù)了。

怎么辦?D瓜哥想到了三個解決辦法,方法如下:

①、比較扯淡的解決方法,在另外一臺電腦或者虛擬機上,遠程連接這個數(shù)據(jù)庫

這是我想到的一個比較扯淡的解決方法。既然我們已經(jīng)允許了遠程連接,那么我們就可以在另外一臺電腦或者另外一個虛擬機上,遠程連接到這個數(shù)據(jù)庫,然后把刪除匿名用戶。步驟如下:

1.在遠程電腦上連接到該數(shù)據(jù)庫。命令如下:

復(fù)制代碼 代碼如下:

mysql -h192.168.1.119 -uroot -p123456

2.然后,切換到mysql數(shù)據(jù)庫。命令如下:

復(fù)制代碼 代碼如下:

use mysql

3.刪除匿名用戶。SQL如下:

復(fù)制代碼 代碼如下:

delete from user where user='';

4.退出,然后就可以在本地直接登錄數(shù)據(jù)庫了。

②、投機取巧的解決辦法,在本地使用跳過權(quán)限表認證的登錄數(shù)據(jù)庫

剛剛在上面的原因解釋中已經(jīng)說過,雖然登錄使用的root帳號,但是被數(shù)據(jù)庫處理成了匿名用戶。而登錄用的帳號和密碼與匿名帳號信息不匹配,才導(dǎo)致權(quán)限認證沒有通過。那干脆就“不走尋常路”,跳過權(quán)限認證這一步,直接登錄不就OK了。具體做法類似“忘記密碼”的處理方式類似,所以,可以參考下面的 忘記數(shù)據(jù)庫密碼 。需要注意的時,這里和“忘記數(shù)據(jù)庫密碼”的處理不一樣的是,這里不需要這里只需要登錄進去,登錄進去之后需要刪除匿名帳號而不是重置密碼。至于刪除匿名帳號的方法,請參考上面的介紹,這里就不再贅述。

③、最詭異的解決辦法,在本地偽裝成遠程主機來登錄數(shù)據(jù)庫

既然如果不知道IP地址,MySQL會默認認為從本地主機登錄。那么,我們就指定一下主機,把自己偽裝成遠程主機登錄。D瓜哥認為這個解決辦法從MySQL的認證機制上是說得通的。

首先,使用ifconfig查出本地主機的IP(注意,不是127開頭的回環(huán)地址)。

然后,使用如下命令登錄:

復(fù)制代碼 代碼如下:

mysql -h192.168.1.119 -uroot -p123456

再然后的工作就是刪除匿名用戶。上面已經(jīng)介紹過了,這里不再贅述。

對于這個方法,D瓜哥需要特別說明一下。這個方法是D瓜哥推測出來的,還經(jīng)過實際測試。所以,所以,歡迎板磚和雞蛋!哈哈

忘記MySQL用戶密碼的解決辦法

因為需要用一個好久不怎么使用的數(shù)據(jù)庫,密碼忘記了,所以遇到了這個問題。這次本來沒打算寫這個內(nèi)容,但是計劃趕不上變化,因為遇到了ERROR 1045 (28000)。后來,發(fā)現(xiàn)使用這個方法也可以解決掉這個問題。為了以后自己查資料方便,干脆把這個主題提出來,作為“常見問題”之一,也記錄一下。

1.停止MySQL數(shù)據(jù)庫。命令如下:

復(fù)制代碼 代碼如下:

sudo service mysql stop

暴力點的做法是,使用ps命令查出來MySQL數(shù)據(jù)庫的PID,然后在使用kill -9 PID直接殺掉數(shù)據(jù)庫進程。這個方法,太過血腥,就不提供命令了。呵呵

2.啟動數(shù)據(jù)庫。命令如下:

復(fù)制代碼 代碼如下:

sudo mysqld_safe --skip-grant-tables &

說明:參數(shù)--skip-grant-tables的意思是啟動MySQL服務(wù)的時候跳過權(quán)限表認證。啟動后,連接到MySQL的root不需要口令。
另外,某些計算機上沒有安裝mysqld_safe命令,則可以使用如下命令來啟動數(shù)據(jù)庫:

復(fù)制代碼 代碼如下:

sudo mysqld --skip-grant-tables &

除此之外,還可以修改MySQL的配置文件/etc/mysql/my.cnf,在[mysqld]的部分中加上一句:skip-grant-tables。但是,使用這種方式在重置完密碼后,還要再重新刪除這句話。D瓜哥個人感覺比較麻煩。僅做了解,不推薦使用這種方式。

3.登錄數(shù)據(jù)庫。命令如下:

復(fù)制代碼 代碼如下:

mysql -uroot

4.切換到mysql數(shù)據(jù)庫

復(fù)制代碼 代碼如下:

mysql> use mysql

5.修改root帳號密碼

復(fù)制代碼 代碼如下:

mysql> update user set password=password('123456') where user='root';

6.退出,然后重啟數(shù)據(jù)庫

復(fù)制代碼 代碼如下:

>sudo service mysql restart

現(xiàn)在,應(yīng)該就可以使用新密碼正常訪問數(shù)據(jù)庫了。

ERROR 2002 (HY000)錯誤的原因以及解決辦法

在登錄數(shù)據(jù)庫的過程中,可能遇到如下錯誤:

復(fù)制代碼 代碼如下:

mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

剛開始,D瓜哥以為是數(shù)據(jù)庫沒有正確創(chuàng)建mysqld.sock這個文件,到/var/run/mysqld/下查看了一下,確實沒有這個文件。

這是怎么回事?怎么會沒有這個文件呢?難道數(shù)據(jù)庫沒有啟動起來。使用如下命令查看一下:

復(fù)制代碼 代碼如下:

>ps aux | grep mysql

Shit,竟然什么都沒有輸出??磥泶_實是數(shù)據(jù)庫沒有啟動起來。使用如下命令啟動數(shù)據(jù)庫:

復(fù)制代碼 代碼如下:

>sudo service mysql start

如果是需要啟動跳過認證的方式啟動,則使用如下命令之一:

復(fù)制代碼 代碼如下:

sudo mysqld_safe --skip-grant-tables &

如果提示沒有mysqld_safe,則使用如下命令:

復(fù)制代碼 代碼如下:

>sudo mysqld --skip-grant-tables &

然后就可以正常登錄了。

關(guān)于這個問題,D瓜哥還想再多說兩句:這個錯誤的根本原因是沒有找到mysqld.sock文件,造成這個問題的原因有兩種:一根本沒有創(chuàng)建這個文件,也就是沒有啟動數(shù)據(jù)庫,這也是D瓜哥在這里介紹的原因;另外一個原因也有可能是創(chuàng)建的目錄不在默認目錄,或者連接數(shù)據(jù)庫時指定的這個文件目錄和實際產(chǎn)生的目錄不符。D瓜哥在網(wǎng)上查資料時,也印著了這個猜測。部分網(wǎng)友的問題就是D瓜哥所說的第二個原因造成的。所以,網(wǎng)上對于這個問題的解決方案還存在另外一個方法。因為D瓜哥沒有遇到,而且情況又比較多,D瓜哥這里就不再過多介紹了。請遇到這個問題的朋友自行查資料解決。

ERROR 2003 (HY000)錯誤的原因以及解決辦法。

復(fù)制代碼 代碼如下:

$ mysql -h192.168.1.113 -uroot -p123456
Warning: Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.113' (111)

是說話,出現(xiàn)這個問題,D瓜哥也很蛋疼。不知這又是怎么搞的!不過,好在有錯誤代碼(ERROR 2003 (HY000)),有了這個就有了打開解決方法之門的鑰匙。解決方法垂手可得。

用Google百度一下,之后在StackOverflow上查到了原因:MySQL數(shù)據(jù)庫的配置文件/etc/mysql/my.cnf中的bind-address = 127.0.0.1沒有注釋掉,導(dǎo)致MySQL只能接收本地的訪問。

知道了原因,解決方法也就隨之而來,注釋掉這行,然后重啟服務(wù)器。具體做法,參考本文開頭部分。

ERROR 1130錯誤的原因以及解決辦法

D瓜哥在查資料的過程中,還遇到別人提到的一個錯誤。日志如下:

復(fù)制代碼 代碼如下:

ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server

給的解答是“所用主機的IP地址不在被允許登錄的IP之內(nèi)”。

D瓜哥也測試了一下這個錯誤。剛剛開始測試的時候,這個錯誤沒有重現(xiàn),還以為我測試有問題。后來,重啟了一下數(shù)據(jù)庫,再次測試發(fā)現(xiàn)成功了。確實有這個錯誤。另外,根據(jù)D瓜哥個人測試經(jīng)驗,善意提醒一句,對mysql.user表進行修改后,記得執(zhí)行一下flush privileges或者重啟一下數(shù)據(jù)庫。

關(guān)于mysqld_safe的簡介

在這次解決這些問題的過程中,D瓜哥查看了一下MySQL的進程。命令以及返回值如下:

復(fù)制代碼 代碼如下:

>ps aux | grep mysql
root      1231  0.0  0.0   4444   740 ?        S    15:09   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     1604  0.9 23.0 1134700 471332 ?      Sl   15:09   0:23 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
root      1605  0.0  0.0   4340   644 ?        S    15:09   0:00 logger -t mysqld -p daemon.error
vagrant   3942  0.0  0.0  12140   928 pts/0    S+   15:51   0:00 grep --color mysql

嗯?!有木有發(fā)現(xiàn)一個剛剛說明的熟悉的東東:mysqld_safe。這個東東怎么啟動起來呢?剛開始D瓜哥以為這個東西不應(yīng)該啟動,甚至還可能導(dǎo)致遠程登錄數(shù)據(jù)庫不成功。(因為當(dāng)時確實有這個問題。而且,在上面跳過認證校驗的啟動時,用到這個命令了。所以,D瓜哥認為它不應(yīng)該被啟動。)經(jīng)過和敵人(你知道,這肯定是這里提到的一些問題)“艱苦卓絕”斗爭后,發(fā)現(xiàn)問題不是這個東東造成的。幸好多思考了一點,否則D瓜哥晚節(jié)不保啊!哈哈

因為剛剛以為這是個問題。所以,就把這個加入到了問題列表里。經(jīng)過D瓜哥的了解,發(fā)現(xiàn)這不是個問題,但是對于D瓜哥來說,這確實解決了D瓜哥的一個疑問,也暫且算是問題吧。為了方便有同樣問題的小伙伴,D瓜哥覺得有必要把mysqld_safe給詳細說明一下。

關(guān)于mysqld_safe的介紹,最權(quán)威的資料自然是官方文檔,由于D瓜哥使用的是MySQL 5.6版。所以,這里參考MySQL :: MySQL 5.6 Reference Manual :: 4.3.2 mysqld_safe — MySQL Server Startup Script來進行說明。以下內(nèi)容翻譯自官方文檔的說明。

官方文檔中,關(guān)于mysqld_safe部分的標(biāo)題,就可以很好地說明mysqld_safe的定位:MySQL服務(wù)器的啟動腳本。正文內(nèi)容還說到,在Unix下,mysqld_safe是推薦的MySQL服務(wù)器的啟動方式。mysqld_safe可以增加一些安全特性,比如當(dāng)服務(wù)器發(fā)生故障時,重啟數(shù)據(jù)庫服務(wù)器,并且將運行信息記錄到錯誤日志文件中。

更多信息,還請各位朋友自行查閱MySQL :: MySQL 5.6 Reference Manual :: 4.3.2 mysqld_safe — MySQL Server Startup Script。不過,這里沒有講到我們剛剛使用的參數(shù)--skip-grant-tables,關(guān)于這個參數(shù),在MySQL :: MySQL 5.6 Reference Manual :: 5.1.3 Server Command Options中做了介紹。

flush privileges的解釋說明

好吧,D瓜哥承認這是一個不是問題的問題。但是,對于D瓜哥來說,這還是一個疑惑,或者說,D瓜哥想知道這句話的確切含義。

從字面意思來說,flush privileges可以翻譯為“刷新權(quán)限”。這個也確實是flush privileges的一個功能:從數(shù)據(jù)庫msql中的授權(quán)表中,重新加載權(quán)限結(jié)果。

mysql新設(shè)置用戶或更改密碼后需用flush privileges刷新mysql的系統(tǒng)權(quán)限相關(guān)表,否則會出現(xiàn)拒絕訪問;還有一種方法,就是重新啟動mysql數(shù)據(jù)庫,來使新設(shè)置生效。

除此之外,flush privileges還可以釋放內(nèi)存的功能。mysql會緩存grant,create user,create server和install plugin語句的結(jié)果。這些內(nèi)存直到執(zhí)行revoke,drop user,drop server和uninstall plugin才會釋放。所以,如果數(shù)據(jù)庫執(zhí)行了很多前面的語句,則會增加內(nèi)存開銷。執(zhí)行flush privileges就會釋放這部分的內(nèi)存。

相關(guān)文章

  • MySQL通過DQL實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的條件查詢

    MySQL通過DQL實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的條件查詢

    這篇文章給大家介紹了MySQL如何通過DQL進行數(shù)據(jù)庫數(shù)據(jù)的條件查詢,文中通過代碼示例和圖文結(jié)合介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • MySQL優(yōu)化之Index Merge的使用

    MySQL優(yōu)化之Index Merge的使用

    本文主要介紹了MySQL優(yōu)化之Index Merge的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解MySQL事務(wù)的隔離級別與MVCC

    詳解MySQL事務(wù)的隔離級別與MVCC

    這篇文章主要介紹了MySQL事務(wù)的隔離級別與MVCC的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-04-04
  • MySQL高并發(fā)生成唯一訂單號的方法實現(xiàn)

    MySQL高并發(fā)生成唯一訂單號的方法實現(xiàn)

    這篇文章主要介紹了MySQL高并發(fā)生成唯一訂單號的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • mysql連接查詢(左連接,右連接,內(nèi)連接)

    mysql連接查詢(左連接,右連接,內(nèi)連接)

    這篇文章主要介紹了mysql連接查詢(左連接,右連接,內(nèi)連接)的相關(guān)資料,這里舉例說明如果使用及附實例代碼,需要的朋友可以參考下
    2017-07-07
  • navicat連接mysql報錯1251的解決方法

    navicat連接mysql報錯1251的解決方法

    這篇文章主要為大家詳細介紹了navicat連接mysql報錯1251的解決方法,文中解決方法介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • mysql字符集亂碼問題解決方法介紹

    mysql字符集亂碼問題解決方法介紹

    解決亂碼的方法是,在執(zhí)行SQL語句之前,將MySQL以下三個系統(tǒng)參數(shù)設(shè)置為與服務(wù)器字符集character-set-server相同的字符集
    2012-05-05
  • mysql 8.0.15 winx64解壓版安裝配置方法圖文教程

    mysql 8.0.15 winx64解壓版安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了mysql 8.0.15 winx64解壓版安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 一文弄懂什么是MySQL的回表

    一文弄懂什么是MySQL的回表

    本文主要介紹了一文弄懂什么是MySQL的回表,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • mysql中drop、truncate與delete的區(qū)別詳析

    mysql中drop、truncate與delete的區(qū)別詳析

    對于drop、truncate和delete雖然簡單,但是真要使用或者面試時候問到還是需要有一定的總結(jié),下面這篇文章主要給大家介紹了關(guān)于mysql中drop、truncate與delete區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評論