【问题标题】:python: use 'MySQLdb' module to connect to remote mysql serverpython:使用'MySQLdb'模块连接到远程mysql服务器
【发布时间】:2015-07-31 02:26:47
【问题描述】:

我有两个虚拟机。一个用作代理,一个用作主控。 Master上安装了Mysql Server(Master上禁止安装Mysql Client,这意味着我不能在Master上使用mysql命令行)。 Mysql 服务器有一个默认用户“root”。现在我想编写一个在代理上使用'MySQLdb'模块的python脚本。测试代码很简单。如下图:

#!/usr/bin/python

import MySQLdb

def main():
    try:
        conn=MySQLdb.connect(host=master ip,user='root',passwd='xxx',db='xxx',port=3306)
        cur=conn.cursor()
        count = cur.execute('select * from table')
        print count
        cur.close()
        conn.close()
    except MySQLdb.Error,e:
        print "Mysql Error %d: %s" % (e.args[0], e.args[1])

if __name__ == "__main__":
    main()

但是,当我在 Agent 上执行时,出现错误:
Mysql Error 1045: Access denied for user 'root@Agent ip'(using password: YES)

所以我不知道为什么用户是'root@Agent ip',而不是Master上Mysql server的默认用户。有谁知道如何解决这个问题?

【问题讨论】:

  • 为什么要设置 host=master ip ?
  • 你已经用user='root'指定了用户名,mysql使用username@host作为用户,所以用户是root@Agent_ip。不是MySQLdb的问题,用mysql客户端登录也会有同样的问题。

标签: python mysql linux


【解决方案1】:

在 MySQL 中有一个名为 GRANT 的命令。您必须授予 root@AgentIP 权限(其中 AgentIP 是您必须访问数据库的系统的 IP。)

要在服务器的mysql客户端运行的命令:

GRANT ALL on mydb.* to 'root'@'YourIP' identified by 'YourPassword'

只有在远程系统中运行的 MySQL 服务器才会授予对数据库的访问权限。

如果不确定IP详细信息,也可以指定'root'@'%',

这将允许来自任何地方的名为 root 的用户的所有请求。这不是推荐的方式,但有这样的选择。

【讨论】:

  • 由于Master上禁止安装mysql客户端,有没有其他方法可以授予远程用户访问权限?
  • @liminche :或者您也可以在 phpmyadmin 的帮助下授予访问权限。但是没有授予权限就没有远程访问的选项
猜你喜欢
  • 2021-07-08
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
相关资源
最近更新 更多