Mysql在连接到本地主机时忽略端口参数

Mysql在连接到本地主机时忽略端口参数,mysql,Mysql,我有两个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 +--------

我有两个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  |
+---------------+-------+

$diff--suppress common line-y我想这与本地主机有关,所以我尝试远程连接,结果成功了!我得到了我期望的不同端口和我想要的差异

嗯?奇怪的然后我想知道mysql是否使用默认套接字连接到mysql实例,事实确实如此。我在mysql手册中找到了一个
protocol
参数,并试图指定
--protocol=TCP

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

中提琴

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

在Unix上,MySQL程序专门处理主机名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帐户

要连接到它。

或者您可以使用-h 127.0.0.1请参阅从Unix开始的部分中的文档,MySQL程序特别处理主机名localhost,其方式可能与您预期的其他基于网络的程序不同。