远程mysql连接在工作台中有效,但在python中不起作用

时间:2019-06-01 19:50:04

标签: mysql mysql-workbench mysql-python

我在raspi上设置了一个mysql服务器(使用mariadb)和数据库,现在正尝试从MacBook连接到它。

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

该连接可在Workbench(在Mac上为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'
password='superuser'
database='securities_master'

import mysql.connector
cnx = mysql.connector.connect(user=user, password=password, host=host, port='3307')
print(cnx.get_server_info()) 

命令行返回以下内容: 错误2013(HY000):在“读取初始通信数据包”时与MySQL服务器的连接丢失,系统错误:3

python脚本返回以下内容: pymysql.err.OperationalError:(2003年,“无法连接到192.168.x.x上的MySQL服务器([Errno 61]连接被拒绝)”)

工作台连接牢固

2 个答案:

答案 0 :(得分:1)

我有同样的问题可以解决:

  1. 检查您的mysql是否授予“ root”或“ youruserID”从本地主机(127.0.0.1)和LAN(192.168.x.x)的数据库访问权限?为此,只需将其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                                                                             |
    

    表示已从任何地方(@'%')授予它特权,包括。本地主机(127.0.0.1)

  2. 要远程访问python,您需要安装mysql连接器:

     $ pip install mysql-connector-python
    
  3. 您可以在Python3中尝试此操作(如果mariaDB端口为3307,默认mysql为3306):

     >>> import mysql.connector
     >>> cnx =mysql.connector.connect(user='root', password='xxx', host='yourraspyi_sql_ip', port='3307')
     >>> print(cnx.get_server_info()) 
    

答案 1 :(得分:0)

您提到mysql -u {superuser} -p {superuser} -h '192.168.x.x' -P '22' -D {securities_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)