標籤:mysql faq
1.1.1. mysql本機登入mysql時,-S參數失效
【環境描述】
mysql5.5.14
【問題描述】
配置了多執行個體
|
執行個體1 |
執行個體2 |
datadir |
/home/mysql_3306 |
/home/mysql_3307 |
basedir |
/usr |
/usr |
socket |
/home/mysql_3306/mysq.sock |
/home/mysql_3307/mysq.sock |
登入執行個體2的時候,卻串連到了執行個體1:
mysql -S /home/mysql_3307/mysql.sock
> show variables like ‘%sock%‘;
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| socket | /home/mysql_3306/mysql.sock |
+---------------+-----------------------------+
【問題原因】
mysql命令中的-S參數是用來指定unix_socket,但是此時mysql很明顯沒有使用socket。
查看/etc/my.cnf設定檔,發現[client]網域設定如下:
[client]
host = 127.0.0.1
嘗試修改host=localhost 和注釋掉host,再次嘗試登入mysql:
mysql -S /home/mysql_3307/mysql.sock
> show variables like ‘%sock%‘;
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| socket | /home/mysql_3307/mysql.sock |
+---------------+-----------------------------+
此時,正常登入上了指定的執行個體。
再次測試登入mysql:
mysql -S /home/mysql_3306/mysql.sock -h 127.0.0.1-P 3307
> show variables like ‘%sock%‘;
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| socket | /home/mysql_3307/mysql.sock |
+---------------+-----------------------------+
mysql登入的時候指定的socket是3306連接埠的,host是127.0.0.1,port是3307,登入後,串連的是3307連接埠的執行個體,
mysql -S /home/mysql_3307/mysql.sock -h127.0.0.1
> show variables like ‘%sock%‘;
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| socket | /home/mysql_3306/mysql.sock |
+---------------+-----------------------------+
mysql登入的時候指定的socket是3307連接埠的,host是127.0.0.1,port沒有指定,登入後,串連的是3306連接埠的執行個體。
綜上,mysql用戶端串連mysql資料庫的時候,如果同時指定了socket和host的時候,mysql會採用TCP/IP協議登入,此時socket會被忽略,預設情況下訪問3306連接埠。