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


今天在安裝mysql時遇到主要問題

在mysql-client用如下命令連接mysql server時

zhaohui@localhost:/usr/local/mysql$ mysql -h localhost -u root -p

報錯

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

用127.0.0.1連接時正常

mysql -h 127.0.0.1 -u root -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7

 

最后的解決思路:

1 首先查看mysql server是否啟動

hui@localhost:/usr/local/mysql$ netstat -apn | grep mysql
(並非所有進程都能被檢測到,所有非本用戶的進程信息將不會顯示,如果想看到所有信息,則必須切換到 root 用戶)
tcp        0      0 127.0.0.1:45179         127.0.0.1:3306          ESTABLISHED 12344/mysql     
unix  2      [ ACC ]     流        LISTENING     84169    -                   /tmp/mysql.sock
zhaohui@localhost:/usr/local/mysql$ sudo netstat -apn | grep mysql
[sudo] password for zhaohui: 
tcp        0      0 127.0.0.1:45179         127.0.0.1:3306          ESTABLISHED 12344/mysql     
tcp6       0      0 :::3306                 :::*                    LISTEN      12301/mysqld    
tcp6       0      0 127.0.0.1:3306          127.0.0.1:45179         ESTABLISHED 12301/mysqld    
unix  2      [ ACC ]     流        LISTENING     84169    12301/mysqld        /tmp/mysql.sock

 

2 由於在本機設置過hostname,可以查看,之前為ThinkPad,經過修改/etc/hostname之后(修改為localhost),仍然無效,問題依舊

zhaohui@localhost:/usr/local/mysql$ hostname localhost

3 仔細看報錯內容,從網上查到,是由於mysql-client 和server都需要socket,而mysql-client的socket從/var/run/mysqld/ysqld.sock中讀取(由報錯可 知),與server端不一致。mysql-client的參數可以按照一個順序讀取,第一個即/etc/my.cnf,如果都沒有,則按照默認,也可以 新建一個文件進行設置。

mysql --help | grep my.cnf order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

 

server端是/tmp/mysql.sock ,可以利用bin/mysqladmin中查看

zhaohui@localhost:/usr/local/mysql$ bin/mysqladmin variables | grep sock | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | 322 | | socket | /tmp/mysql.sock 


兩者沖突,網上有一種解決方法是建立一個軟連接,大家反饋感覺不太好,主要是server端的/tmp可能會被系統干掉。

4 最終采用如下解決方法(來源

mysql主機填寫localhost與非localhost有不同的地方

當主機填寫為localhost時mysql會采用 unix domain socket連接

當主機填寫為127.0.0.1時mysql會采用tcp方式連接

這是linux套接字網絡的特性,win平台不會有這個問題,因此在/etc/my.cnf中的[mysql]中添加

[mysql]
protocol=tcp

啟動mysql,搞定!

zhaohui@localhost:/usr/local/mysql$ mysql -h localhost
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM