2013-05-09 153 views
2

我试图创建一个使用运行12.04 Ubuntu主机上的MySQL远程数据库SQLAlchemy的OperationalError:(OperationalError)(1045,“访问被拒绝的用户

它与远程登录enabled.I 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:[email protected]/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 

我想不通为什么会发生这种情况?

回答

3

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

你的连接URI具有root用户密码为pass

engine = create_engine('mysql://root:[email protected]/home/karthik.sharma/ms_thesis/nwtopology.db', echo=False) 

所以,你需要做的是设置root用户的密码,并在您的应用程序运行的数据库服务器和应用程序授予来自主机的访问。这里是step by step guide for doing this

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

请尝试配置mysql数据库访问,并随时发布您的问题,以stackoverflow,如果有的话。

而且mysql的URI会look稍有不同:

'mysql://root:[email protected]/nwtopology' 
+0

看来你所说的是数据库本身(nwtopology)必须创建之前,我可以使用create_engine()从sqlalchemy.I最初有一个本地数据库使用sqlite它创建数据库,如果不存在否则它会打开现有的数据库。我认为我处于这种思维模式。 – liv2hak 2013-05-09 21:08:45

+1

你是对的 - 你需要从头开始在mysql中创建新的数据库。你是如何创建你的sqlite数据库?你有没有''创建表...''查询?还是你使用SQLAlchemy创建表? – vvladymyrov 2013-05-09 21:40:38

+0

我创建了一个新的数据库,并遵循你建议的链接。现在我得到新的错误:(我已经创建了一个新的问题.http://stackoverflow.com/questions/16472175/operationalerror-operationalerror-2003-cant-连接到MySQL服务器对1 – liv2hak 2013-05-09 22:28:20

1

我认为MySQL用户'root'@'openflow.ems.com'没有访问权限,所以你可以尝试:

GRANT ALL on *.* to 'root'@'openflow.ems.com'; 
FLUSH PRIVILEGES; 
+0

是笑话? – Peter 2018-03-07 02:55:07

相关问题