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端口。