我正在尝试在运行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
我无法弄清楚为什么会发生这种情况?非常感谢任何帮助?
答案 0 :(得分:3)
首先,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用户密码并从运行应用程序的主机向数据库服务器和应用程序授予访问权限。这是step by step guide for doing this。
有一种方法可以通过在运行mysql服务器的同一台服务器上运行命令mysql -u root -p
,以root用户身份从命令行访问mysql db。默认情况下,mysql配置为允许root用户从localhost登录,密码为空。
请尝试配置mysql数据库访问权限,并随时将您的问题发布到stackoverflow(如果有的话)。
同样,mysql URI look会有所不同:
'mysql://root:pass@192.168.129.139/nwtopology'
答案 1 :(得分:1)
我认为mysql用户'root'@'openflow.ems.com'
没有访问权限,所以你可以尝试:
GRANT ALL on *.* to 'root'@'openflow.ems.com';
FLUSH PRIVILEGES;