Mysql在连接到localhost时忽略端口参数

时间:2018-02-27 00:49:09

标签: mysql

我有2个临时并行运行的mysql实例。我去做了一个模式的差异,并且在没有任何报告的情况下知道出了什么问题。

$ diff --suppress-common-lines -y <(mysqldump --port 3307 -d accounts) <(mysqldump --port=3306 -d accounts)

$ mysql --no-defaults --port 3306 -e "show variables like 'port'" dbname

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+

$ mysql --no-defaults --port 3307 -e "show variables like 'port'" dbname                                                                                                                       
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+

端口参数被忽略!

1 个答案:

答案 0 :(得分:1)

默认情况下,与localhost的连接使用的是Unix域套接字,而不是TCP,因此忽略端口号。 documentation解释说:

  

在Unix上,MySQL程序特别对待主机名localhost,其方式可能与您期望的与其他基于网络的程序相比有所不同。对于与localhost的连接,MySQL程序尝试使用Unix套接字文件连接到本地服务器。即使给出--port或-P选项指定端口号,也会发生这种情况。要确保客户端与本地服务器建立TCP / IP连接,请使用--host或-h指定主机名值127.0.0.1,或本地服务器的IP地址或名称。您还可以使用--protocol = TCP选项显式指定连接协议,即使对于localhost也是如此。

另一种选择是将端口3307实例配置为使用不同的Unix套接字文件名。例如。使用

运行服务器
mysqld --socket=/tmp/mysql3307.sock --port=3307

然后使用

mysqldump --socket=/tmp/mysql3307.sock -d accounts

连接到它。