本地连接时,通过localhost不能登陆到指定的端口

本地连接时,通过localhost不能登陆到指定的端口

朋友说他的一台服务器上,装了多个mysql,用了不同的端口,通过localhost的方式指定端口时,连上的还是3306的端口
mysql -uroot -hlocalhost   -P3307 -p
这样连的是 3306的库。
但是通过
mysql -uroot -h127.0.0.1 -P3307 -p
连到的是 3307的库。
这是为什么

我在我本地一台服务器上建了两个实例,   3306和3308

mysql -uroot -h127.0.0.1 -P3308
Welcome to the MySQL monitor.   Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.24 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select user,host from mysql.user;
+------+------------+
| user | host          |
+------+------------+
| root | 10-4-1-104 |
| root | 127.0.0.1   |
| root | ::1            |
| root | localhost   |
+------+------------+

  mysql -uroot --host=localhost -P3308
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

这种方式,直接就连不上。

查看了文档   5.6 p264
On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from
what you expect compared to other network-based programs. For connections to localhost, MySQL
programs attempt to connect to the local server by using a Unix socket file. This occurs even if a --port
or -P option is given to specify a port number. To ensure that the client makes a TCP/IP connection to the
local server, use --host or -h to specify a host name value of 127.0.0.1, or the IP address or name of
the local server. You can also specify the connection protocol explicitly, even for localhost, by using the
--protocol=TCP option.
当使用localhost的时候,会试着用socket文件,虽然你指定了端口。
指定--protocol=TCP 可以避免这种情况。
在我的环境中:
  mysql -uroot -hlocalhost -P3308 --protocol=TCP
Welcome to the MySQL monitor.   Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.24 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like '%port%'
      -> ;
+---------------------+-------+
| Variable_name          | Value |
+---------------------+-------+
| innodb_support_xa    | ON      |
| large_files_support | ON      |
| port                        | 3308   |
| report_host             |          |
| report_password       |          |
| report_port             | 3308   |
| report_user             |          |
+---------------------+-------+

告诉朋友,让他加上 --protocol=TCP 之后,也可以正常的连接到想连接的端口

总结:在本地使用localhost登陆库时,如果需要连接到别的端口需要 加上--protocol=TCP 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值