3

我正在尝试在运行 12.04 的 Ubuntu 机器上使用 mysql 创建一个远程数据库。

它有一个启用远程登录的root用户。我已经启动了服务器。

的输出

sudo netstat -tap | grep mysql

节目

tcp        0      0 *:mysql                 *:*                     LISTEN      13135/mysqld 

从也运行 Ubuntu 12.04 的客户端计算机上,我使用 python 脚本使用 sqlalchemy 连接到远程 mysql 数据库。

from pox.core import core
import pox.openflow.libopenflow_01 as of
import re
import datetime
import time
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.sql.expression import exists

log = core.getLogger()

engine = create_engine('mysql://root:pass@192.168.129.139/home/karthik.sharma/ms_thesis/nwtopology.db', echo=False)

Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()

class SourcetoPort(Base):
    """"""
    __tablename__ = 'source_to_port'
    id = Column(Integer, primary_key=True)
    port_no        = Column(Integer)
    src_address    = Column(String,index=True)

    #-----------------------------------------
    def __init__(self, src_address,port_no):
        """"""
        self.src_address = src_address
        self.port_no     = port_no

create_engine() 调用失败并出现以下错误。

  return dialect.connect(*cargs, **cparams)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 280, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (OperationalError) (1045, "Access denied for user 'root'@'openflow.ems.com' (using password: YES)") None None

我无法弄清楚为什么会这样?非常感谢任何帮助?

4

3 回答 3

6

首先,mysql 不喜欢你的 root 用户密码。

您的连接 URI 的 root 用户密码为pass

engine = create_engine('mysql://root:pass@192.168.129.139/home/karthik.sharma/ms_thesis/nwtopology.db', echo=False)

因此,您需要做的是配置 root 用户密码并授予从您的应用程序运行的主机到 db 服务器和应用程序的访问权限。这是执行此操作的分步指南

有一种方法可以从命令行以 root 用户身份访问 mysql db,方法是在运行mysql -u root -pmysql 服务器的同一台服务器上运行命令。默认情况下,mysql 配置为允许 root 用户从 localhost 使用空密码登录。

请尝试配置 mysql 数据库访问权限,如果有任何问题,请随时将您的问题发布到 stackoverflow。

mysql URI看起来也略有不同:

'mysql://root:pass@192.168.129.139/nwtopology'
于 2013-05-09T15:09:43.583 回答
1

我认为 mysql 用户'root'@'openflow.ems.com'无权访问,因此您可以尝试:

GRANT ALL on *.* to 'root'@'openflow.ems.com';
FLUSH PRIVILEGES;
于 2013-05-09T07:45:48.817 回答
0

供其他人参考 - 如果您在正确配置访问权限的情况下遇到此问题,原因可能是您的密码包含特殊字符。特殊字符必须经过 URL 编码。

在 Python 3.x 中,这可以使用urllib库来完成:

import urllib
db_password = "!my@pa$sword%"
db_password_quoted = urllib.parse.quote(db_password)
print(db_password_quoted)
>> %21my%40pa%24sword%25

然后传递db_password_quoted给连接/引擎而不是原始密码。

于 2021-09-25T09:19:34.627 回答