远程mysql连接在workbench中工作,但在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] 我已经添加了一个具有所有权限的超级用户,正在尝试使用以下命令在我的Mac命令行上连接:远程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] 我已经添加了一个具有所有权限的超级用户
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 -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) $ pip install mysql-connector-python
您提到了
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)