远程mysql连接在workbench中工作,但在python中不工作

远程mysql连接在workbench中工作,但在python中不工作,mysql,mysql-workbench,mysql-python,Mysql,Mysql Workbench,Mysql Python,我在我的raspi上安装了一个mysql服务器(使用mariadb)和数据库,现在正试图从我的MacBook连接到它 版本: mysql版本15.1发行版10.1.38-MariaDB,用于使用readline 5.2的debian linux gnueabihf(armv7l) 连接在Workbench(在Mac上)中工作,但我无法让它在python或命令行中连接 raspi上的/etc/my.cnf如下所示: 绑定地址=0.0.0.0 [mysqld] 我已经添加了一个具有所有权限的超级用户

我在我的raspi上安装了一个mysql服务器(使用mariadb)和数据库,现在正试图从我的MacBook连接到它

版本: mysql版本15.1发行版10.1.38-MariaDB,用于使用readline 5.2的debian linux gnueabihf(armv7l)

连接在Workbench(在Mac上)中工作,但我无法让它在python或命令行中连接

raspi上的/etc/my.cnf如下所示:

绑定地址=0.0.0.0

[mysqld]

我已经添加了一个具有所有权限的超级用户,正在尝试使用以下命令在我的Mac命令行上连接:

mysql -u {superuser} -p {superuser} -h '192.168.x.x' -P '3307' -D {securities_master}
这不管用

在python中,我尝试了不同的版本:

host='192.168.x.x'
user='superuser'
密码=“超级用户”
数据库class='securities\u master'
导入mysql.connector
cnx=mysql.connector.connect(user=user,password=password,host=host,port='3307')

打印(cnx.get_server_info())
我刚刚解决了同样的问题:

  • 检查mysql是否已授予“root”或“youruserID”从本地主机(127.0.0.1)和LAN(192.168.x.x)访问DB的权限?为此,只需将ssh连接到远程服务器,然后:

     $ mysql -u root -p
     mysql> SHOW GRANTS
    
    对我来说,它表明:

     Grants for root@localhost 
    ----------
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD ‘*———‘ WITH GRANT OPTION |
    | GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                                                             |
    
    这意味着它已从任何位置(@“%”)被授予权限,包括localhost(127.0.0.1)

  • python远程访问您需要安装mysql连接器:

     $ pip install mysql-connector-python
    
  • 在Python3中,您可以尝试以下方法(如果端口为3307,则默认mysql为3306):


  • 您提到了
    mysql-u{superuser}-p{superuser}-h'192.168.x.x'-p'22'-D{securities\u master}
    工作正常

    这里,mysql连接端口是22。如果这真的有效,那么

    host = '192.168.x.x'
    user='superuser'
    password='superuser'
    database='securities_master'
    
    import pymysql.cursors
    connection = pymysql.connect(host=host,
                                 port=3306,
                                 user=user,
                                 password=password,
                                 db=database,
                                 charset='utf8',
                                 cursorclass=pymysql.cursors.DictCursor)
    
    应该是

    host = '192.168.x.x'
    user='superuser'
    password='superuser'
    database='securities_master'
    
    import pymysql.cursors
    connection = pymysql.connect(host=host,
                                 port=22,
                                 user=user,
                                 password=password,
                                 db=database,
                                 charset='utf8',
                                 cursorclass=pymysql.cursors.DictCursor)
    
    端口号已更改为3306到22

    你可以跟我核对一下

    pymysql.connect(db='securities_master', user='superuser', passwd='superuser', host='192.168.x.x', port=22)
    

    在我的情况下,用户超级用户与root用户具有相同的权限。你说的检查他们是否可以访问本地主机和ip是什么意思?正如Sadi提到的,connection cmd line-p22表示你的端口是22,这是不正确的!22通常用于SSH,mysql的端口是3306,如果mariaDB是3307,这也是我的问题,缺少端口!如果ssh登录到raspi并登录到mysql,最好不要在cmd行中添加任何端口,只需使用“mysql-u root p”,检查mysql是否正在运行并在本地可访问。当我以root身份登录并要求显示授权时,它看起来与您的相同,但如果您使用mariaDB,您的python代码对meremember不起作用,端口是3307!请走第一步。打印“SHOW GRANTS”工作台正在Mac上运行我不知道如何从您发布的链接更新Mac防火墙抱歉,我反向阅读了配置,因为Mac正在托管mysql,您使用raspi连接到Mac托管的mysql实例。不,对不起,我的意思是命令行和python方法都不起作用。我会用不同的方法再试一次ports@JoanArau在这种情况下,您可以共享在mysql工作台中工作的连接字符串吗?此外,如果特权部分以某种方式限制了主机,则可能需要查看该部分。如果有这样的限制,那么mysql工作台可以在其他连接失败时使用SSH隧道。我在考虑SSH隧道,因为22是默认的SSH端口,在mysql workbench中,如果它使用SSH隧道,您可以看到它。这里完全是初学者,我如何在workbench中看到连接字符串来向您展示它?这是什么?superuser@127.0.0.1::3306. 来自workbench的命令行中的这个命令也起作用:“/Applications/MySQLWorkbench.app/Contents/MacOS/mysql”“-usupurer”“-h127.0.0.1”-P50416-p127.0.0.1是本地主机,您是否在本地计算机中托管了mysql服务器?您已经提到它是远程的,因此在这种情况下,mysql workbench肯定使用了隧道。使用任何管理工具(如mysql workbench)登录mysql。转到特权,选择用户,它可能只有一个主机为
    localhost
    的条目。现在用相同的用户名和密码创建另一个条目,但主机将是
    %
    。现在再试一次<代码>%表示任何主机。
    pymysql.connect(db='securities_master', user='superuser', passwd='superuser', host='192.168.x.x', port=22)