1

我正在尝试使用mysql-connector-python. mysql 服务器设置为仅允许本地连接。它适用于许多其他应用程序,但不适用于我的 python 脚本。我正在使用以下内容:

db_config = {'host': 'localhost', 'user': 'aaa', 'password': 'xxx', 'database': 'aaa'}
conn = mysql.connector.connect(**db_config)

我收到以下错误:

mysql.connector.errors.DatabaseError: 1130: Host 'static-xxx-xxx-xxx-xxx.net.upcbroadband.cz' is not allowed to connect to this MySQL server

static-xxx-xxx-xxx-xxx.net.upcbroadband.cz与我的公共静态 IP 地址对应的主机名在哪里。

我尝试将host参数更改为127.0.0.1,但没有帮助。

有趣的是,当我尝试从终端登录时:mysql -h localhost -u aaa -p,没有问题,但是,当我这样做时:mysql -h 127.0.0.1 -u aaa -p,我得到了同样的错误,

ERROR 1130 (HY000): Host 'static-xxx-xxx-xxx-xxx.net.upcbroadband.cz' is not allowed to connect to this MySQL server

是否有可能mysql-connector-python以某种方式将本地主机转换为公共 IP?

4

1 回答 1

1

原来,MASQUERADE已为所有外部数据包设置:

sudo iptables --table nat --list

[...]
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  10.0.0.0/8           anywhere
MASQUERADE  all  --  anywhere             anywhere

当我删除它时,sudo iptables -t nat -D POSTROUTING -j MASQUERADE 问题就解决了。

我实际上在尝试时发现了这一点

mysql -h localhost --protocol=TCP

这再次产生了将 localhost 解析为公共主机名的 1130 错误。这意味着,如果我理解正确的话,mysql-connector-python默认情况下使用 TCP 与mysql命令相反。

于 2018-06-24T12:36:16.493 回答