无法使用mysql-connector-python连接到本地主机,错误1130

时间:2018-06-23 20:51:14

标签: python mysql database-connection mysql-connector-python mysql-error-1130

我正在尝试使用mysql-connector-python从pyhton连接到本地mysql数据库。 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?

1 个答案:

答案 0 :(得分: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

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