今天在安裝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
