mysql 不限定 ip_mysql 不指定 ip 的连接默认都是 localhost
問題場景
在本地使用 docker 啟動了一個 mysql 容器,并把本地的33067端口映射到容器內 mysql 的?3306,我們假設容器的 ip 地址是?172.17.0.2,使用本地的 mysql 客戶端嘗試連接容器內部的 mysql 服務。
方法 1
由于是綁定本地的 33067 端口,所以在連接時指定端口號即可。
1
mysql -uroot -P33067
此時 mysql-client 實際上進入了本地的 mysql 服務,使用?status?命令可以查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Connection id: 49
Current database:
SSL: Not in use
Current pager: stdout
Using outfile: ‘‘
Using delimiter: ;
Server version: 5.5.52-0ubuntu0.14.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 1 hour 35 min 41 sec
connecttion 信息是本地的 unix socket,這樣的連接并沒有連接到容器內的 mysql。
方法 2
嘗試指定對應 host 和映射的本地端口,由于映射的是本地端口,所以 host 為 localhost
1
mysql -uroot -hlocalhost -P33067
依然連接的是本地的 mysql 服務。
方法 3
直接使用容器的的 ip 地址,默認端口是 3306
1
mysql -uroot -h172.17.0.2
連接成功,進入容器內部的 mysql 服務。
方法 4
使用 127.0.0.1 地址,并指定本地映射的端口 33067
1
mysql -uroot -h127.0.0.1 -P33067
連接成功,進入容器內部的 mysql 服務。
分析
方法 1 和 方法 2 連接的 host 其實都是 localhost(不指定 host,默認是 localhost),此時不論端口指定什么,mysql-client 都嘗試使用 unix socket 的通信方式,也就是本地的 socket ,所以如果要連接指定 ip 的 mysql 服務,必須要指定 ip ,即使該 ip 映射的是 localhost。
如上的場景由于容器內的 mysql 服務端口映射到本地的特定端口,即使是這種情況,連接依然需要指定本地 ip 127.0.0.1,而不是本地的 hostname localhost,因為一旦使用了 localhost,mysql-client 就嘗試使用本地的 unix socket 連接本地的 mysql 服務。
因而可以得知,mysql 不指定 ip 的連接默認都是 localhost,嘗試連接的是本地 mysql 服務,無論端口是什么。
參考:http://sanyuesha.com/2016/10/14/mysql-connect-localhost-and-ip-difference/#more
原文:https://www.cnblogs.com/jiangweili/p/9313319.html
總結
以上是生活随笔為你收集整理的mysql 不限定 ip_mysql 不指定 ip 的连接默认都是 localhost的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7系统修复工具_205个电脑系统修
- 下一篇: c++学习笔记之类和对象的进阶