远程 mysql 连接在 workbench 中有效,但在 python 中无效
Remote mysql connection works in workbench but not in python
我在我的 raspi 上设置了一个 mysql 服务器(使用 mariadb)和数据库,现在正尝试从我的 MacBook 连接到它。
版本:
mysql Ver 15.1 Distrib 10.1.38-MariaDB,用于 debian-linux-gnueabihf (armv7l) 使用 readline 5.2
连接在 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'
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())
命令行returns这个:
错误 2013 (HY000):与位于 'reading initial communication packet' 的 MySQL 服务器失去连接,系统错误:3
python 脚本 returns 这个:
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '192.168.x.x' ([Errno 61] Connection refused)")
Workbench连接牢固
我也解决了同样的问题:
检查您的 mysql 是否已授予 "root" 或 "youruserID" 从 localhost(127.0.0.1) 和 LAN(192.[=36) 访问的权限=]) 数据库权限?为此,只需 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)
python远程访问需要安装mysql连接器:
$ pip install mysql-connector-python
在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())
您提到 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)
我在我的 raspi 上设置了一个 mysql 服务器(使用 mariadb)和数据库,现在正尝试从我的 MacBook 连接到它。
版本: mysql Ver 15.1 Distrib 10.1.38-MariaDB,用于 debian-linux-gnueabihf (armv7l) 使用 readline 5.2
连接在 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'
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())
命令行returns这个: 错误 2013 (HY000):与位于 'reading initial communication packet' 的 MySQL 服务器失去连接,系统错误:3
python 脚本 returns 这个: pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '192.168.x.x' ([Errno 61] Connection refused)")
Workbench连接牢固
我也解决了同样的问题:
检查您的 mysql 是否已授予 "root" 或 "youruserID" 从 localhost(127.0.0.1) 和 LAN(192.[=36) 访问的权限=]) 数据库权限?为此,只需 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)
python远程访问需要安装mysql连接器:
$ pip install mysql-connector-python
在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())
您提到 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)