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

标签 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 是与我的公共(public)静态 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 以某种方式将本地主机转换为公共(public) ip?

最佳答案

事实证明,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 解析为公共(public)主机名。这意味着,如果我理解正确的话,mysql-connector-python 默认使用 TCP,这与 mysql 命令相反。

关于python - 无法使用 mysql-connector-python 连接到本地主机,错误 1130,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51004941/

相关文章:

MySQL 加载数据 Infile - 导致错误 1265 : Data Truncated 的空值

python - SQLAlchemy 中的导入错误

mysql - 在 Windows 中安装 perl DBI-mysql 的问题

python - 如何在此(简单的)python 程序中正确使用递归?

python - 在 docker (FastAPI) 中使用 Wea​​syPrint 导出的 PDF 中的字体

mysql - LEFT JOIN + 多个 WHERE 子句

sql-server - Node Express 多个 SQL 服务器连接

entity-framework - 不支持 'data source' 关键字。 (ASP.Net 应用程序、 Entity Framework 5、代码优先、迁移)

python - 如何使用 networkx 从给定图中提取所有可能的诱导子图

python - 在 cython 数组中查找整数索引