python mysql.connector模块使用错误的IP地址

时间:2019-02-27 22:25:05

标签: python mysql docker ip

在脚本中使用python mysql.connector模块时出现问题。当我从脚本运行连接到运行mysql v8的docker容器时,它尝试连接到错误的IP地址。下面是示例函数:

import mysql.connector
def connect():
    db =  mysql.connector.connect(
        host="172.17.0.2",
        user="user",
        passwd="password",
        auth_plugin='mysql_native_password')

运行此命令时,将产生以下错误: mysql.connector.errors.ProgrammingError:1045(28000):用户'user'@'172.17.0.1'的访问被拒绝(使用密码:是)

这是我要连接的docker容器的IP

IPAddress”:“ 172.17.0.2”

真正有趣的是,在交互式python会话中使用mysql.connector时,我可以很好地连接到数据库。见下文

Python 3.7.2 (default, Jan 16 2019, 19:49:22) 
[GCC 8.2.1 20181215 (Red Hat 8.2.1-6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mysql.connector
>>> db =  mysql.connector.connect(
... host="172.17.0.2",
... user="user",
... passwd="passwd",
... auth_plugin='mysql_native_password')
>>> mycursor =  db.cursor()
>>> mycursor.execute("show databases")
>>> for x in mycursor: print(x)
... 
('food',)
('information_schema',) 

这是我在Fedora 29上运行的mysql-connector版本

pip list |grep mysql-connector
mysql-connector-python 8.0.15       

这也是docker版本信息

Client:
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.6
 Git commit:        6247962
 Built:             Sun Feb 10 04:13:54 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 03:47:25 2019
  OS/Arch:          linux/amd64
  Experimental:     false

有什么想法会导致无法从脚本运行此脚本?

1 个答案:

答案 0 :(得分:0)

该脚本不会尝试连接到错误的IP。错误消息

mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'user'@'172.17.0.1' (using password: YES)

意味着通过此主机user来的该用户172.17.0.1将无法连接到您试图在172.17.0.2上访问的数据库。 您需要做的是为此用户172.17.0.1从主机userallow remote MySQL connection,这将使脚本能够按预期工作。

更新: 不确定是否相关,但是python脚本显示密码为password,控制台显示密码为passwd。如果已经允许远程访问,请确保您正确输入了密码