2013-05-09 65 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

相關問題