我在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]连接被拒绝)”)
工作台连接牢固
答案 0 :(得分: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)
要远程访问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())
答案 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)