我正在尝试使用mysql在运行12.04的Ubuntu机器上创建一个远程数据库。
它有一个启用了远程登录的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_nocreate_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我不明白为什么会发生这种情况?有什么可以帮上忙的吗?
发布于 2013-05-09 23:09:44
首先,mysql不喜欢您的root用户密码。
您的连接URI的根用户密码为pass
engine = create_engine('mysql://root:pass@192.168.129.139/home/karthik.sharma/ms_thesis/nwtopology.db', echo=False)因此,您需要做的是配置root用户密码,并从运行应用程序的主机授予对数据库服务器和应用程序的访问权限。这是step by step guide for doing this。
有一种方法可以作为根用户从命令行访问mysql,方法是在运行mysql服务器的服务器上运行命令mysql -u root -p。默认情况下,mysql配置为允许root用户使用空密码从本地主机登录。
请尝试配置mysql数据库访问,如果有问题,请随时将问题发布到stackoverflow。
同样,mysql URI的look也没有什么不同:
'mysql://root:pass@192.168.129.139/nwtopology'发布于 2013-05-09 15:45:49
我认为mysql用户'root'@'openflow.ems.com'没有访问权限,因此您可以尝试:
GRANT ALL on *.* to 'root'@'openflow.ems.com';
FLUSH PRIVILEGES;发布于 2021-09-25 09:19:35
供其他人参考-如果您在正确配置访问权限的情况下仍面临此问题,原因可能是您的密码包含特殊字符。特殊字符必须是URL编码的。
在Python3.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而不是原始密码传递给连接/引擎。
https://stackoverflow.com/questions/16455934
复制相似问题