Ubuntu下出現Mysql error(2002)的解決方法
過了一陣子後,為了寫分散式作業,重新使用Mysql時,發現雖然啟動成功了,但是連線的時候去出現如下錯誤
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
根據提示是/var/run/mysqld/mysqld.sock檔案不存在。
為什麼會這樣呢?
在網上找了找答案,發現每個人說的都不一樣,而且mysql.server檔案中根本就不存在建立/var/run/mysqld/mysqld.sock檔案的語句。
1.解決辦法:
$mysql --help
根據幫助可以看到,mysql預設使用socket檔案/var/run/mysqld/mysqld.sock檔案,埠3306來連線mysql伺服器。所以我們可以修改預設連線引數來試一試。
$mysql --socket=/tmp/mysql.sock
那麼,怎樣知道需要把socket修改為/tmp/mysql.sock呢?
我是根據檢視mysql程序得到的訊息,使用如下命令:
$ps aux|grep mysql
可以看到啟動的mysql程序使用了引數--socket=/tmp/mysql.sock --port=3306。所以使用命令:
$mysql --socket=/tmp/mysql.sock後就能夠成功連線上mysql伺服器了。
2.追根究底
根據命令
$mysql --help
的輸出結果可以看到,mysql會按順序讀取配置檔案/etc/my.conf,/etc/mysql/my.conf,/usr/etc/my.con,~/.my.conf
在/etc/my.conf中可以看到
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
這就是為什麼mysql伺服器啟動後使用的socket是/tmp/mysql.sock
在/etc/mysql/my.conf中可以看到
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_saft]
socket = /var/run/mysqld/mysqld.sock
[mysqld]
port = 3306
socket = /var/run/mysqld/mysqld.sock
這樣,兩個檔案設定都匹配,導致/etc/mysql/my.conf中的[client]覆蓋了/etc/my.conf中的[client]設定,所以連線不正確。最簡單的辦法是刪除這個檔案
$sudo mv /etc/mysql/my.conf /etc/mysql/mysql.conf_backup
然後再使用預設引數連線mysql伺服器就正常了。