无法使用 mysql-connector-python 连接到 localhost,错误 1130

Posted

技术标签:

【中文标题】无法使用 mysql-connector-python 连接到 localhost,错误 1130【英文标题】:Can't connect to localhost using mysql-connector-python, error 1130 【发布时间】:2018-12-02 22:26:47 【问题描述】:

我正在尝试使用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 是否有可能以某种方式将 localhost 转换为公共 ip?

【问题讨论】:

检查你的host文件,它可能有本地主机映射到公共IP 我也是这么想的,但是没有-hosts文件是正常的。此外,使用mysql -h localhost -u aaa -p 命令也没有问题。 【参考方案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 命令相反。

【讨论】:

以上是关于无法使用 mysql-connector-python 连接到 localhost,错误 1130的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥

Worklight Studio 和本地开发,有时无法使用 Java 类,有时无法使用 HTML 文件

ADB无法使用解决办法

Ubuntu 80端口无法使用-非root用户无法使用1024以下端口

无法在 SQL Server 视图中使用工作查询:“IS”无法识别“>”无法识别

LINUX下的mail\mailx为啥无法使用外部SMTP发邮件