本地連線時,通過localhost不能登陸到指定的埠

psufnxk2000發表於2015-11-02
本地連線時,通過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 



轉載請註明源出處 
QQ 273002188 歡迎一起學習 
QQ 群 236941212 
oracle,mysql,mongo 相互交流

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25099483/viewspace-1821035/,如需轉載,請註明出處,否則將追究法律責任。

相關文章