1. 程式人生 > >Ubuntu下出現Mysql error(2002)的解決方法

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伺服器就正常了。