mysql python连接时、指定的ip地址被转接了_mysql 不指定 ip 的连接默认都是 localhost...

问题场景

在本地使用 docker 启动了一个 mysql 容器,并把本地的33067端口映射到容器内 mysql 的 3306,我们假设容器的 ip 地址是 172.17.0.2,使用本地的 mysql 客户端尝试连接容器内部的 mysql 服务。

方法 1

由于是绑定本地的 33067 端口,所以在连接时指定端口号即可。

1mysql -uroot -P33067

此时 mysql-client 实际上进入了本地的 mysql 服务,使用 status 命令可以查看

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16Connection id: 49

Current database:

Current user: root@localhost

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

1mysql -uroot -hlocalhost -P33067

依然连接的是本地的 mysql 服务。

方法 3

直接使用容器的的 ip 地址,默认端口是 3306

1mysql -uroot -h172.17.0.2

连接成功,进入容器内部的 mysql 服务。

方法 4

使用 127.0.0.1 地址,并指定本地映射的端口 33067

1mysql -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 服务,无论端口是什么。

Beware that by default, the mysql client tries to connect using a unix socket when you tell it to connect to localhost. So do use 127.0.0.1 and not localhost:

$ mysql -h 127.0.0.1 -P 3306 -u root

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值