我有两个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 |
+---------------+-------+端口参数被忽略了!
发布于 2018-02-27 01:06:16
默认情况下,连接到localhost使用的是Unix域套接字,而不是TCP,因此忽略端口号。文档解释道:
在Unix上,MySQL程序特别对待主机名localhost,这种方式可能与其他基于网络的程序不同。对于到本地主机的连接,MySQL程序试图使用Unix文件连接到本地服务器。即使给出一个-端口或-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去连接它。
发布于 2018-02-27 00:51:04
我觉得这和本地主机有关,所以我试着远程连接,结果成功了!我得到了我想要的不同的端口和我想要的差异。
哈?真奇怪。然后,我想知道mysql是否使用默认的套接字连接到mysql实例,而且确实是这样。我在mysql手册中找到了一个protocol参数,并试图指定--protocol=TCP。
$ mysql --no-defaults --port 3307 --protocol TCP -e "show variables like 'port'" dbname
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3307 |
+---------------+-------+维奥拉!
https://stackoverflow.com/questions/48999448
复制相似问题