2016-04-23 92 views
0

我有一個MySQL數據庫託管在「arvixe」(並由cPanel管理)。我可以通過我的PC上的「MySQL Workbech」連接到它,所以我建議我正確創建它。從Cloud9 python應用程序無法連接到MySQL數據庫(託管在arvixe)

我在CLOUD9舉辦一個Python應用程序(如電報機器人),所以我用下面的代碼連接到數據庫:

import MySQLdb 

# Open database connection 
db = MySQLdb.connect("weongame.com","weonwii_ceux","<here my pass>","weonwii_Forms_Bot") 

結果是,很長一段時間後(我supose那任何一種「超時」)時,控制檯顯示下一個回溯:

Traceback (most recent call last):                                            
    File "/home/ubuntu/workspace/bot.py", line 9, in <module>                                      
    db = MySQLdb.connect("weongame.com","weonwii_ceux","<here my pass>","weonwii_Forms_Bot")                               
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/__init__.py", line 81, in Connect                              
    return Connection(*args, **kwargs)                                           
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/connections.py", line 204, in __init__                             
    super(Connection, self).__init__(*args, **kwargs2)                                       
_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on 'weongame.com' (110)") 

所以我把重點放在主要的錯誤:_mysql_exceptions.OperationalError:(2003,「無法連接到MySQL服務器上的「weongame。 com'(110)「)

我剛剛在cPanel上找到了「遠程MySQL」部分。我不知道我必須在那裏介紹的確切IP,所以我寫了c9.io(作爲主機名和IP地址),https://forms-bot-ceuxdruman.c9users.io(Cloud9說我的應用程序正在運行,儘管它是一個簡單的腳本,而不是網頁/網絡應用程序)以及向我的Cloud9工作區的Ubuntu控制檯詢問的IP地址。但是在介紹所有這些知識之後(考慮IP可能是動態的),結果完全一樣。

我也知道arvixe允許這種外部連接,所以這不是一個可能的原因。

任何可能導致錯誤的想法?提前致謝。

編輯:我用

import socket 
socket.gethostbyname(socket.gethostname()) 

找出正在運行我的機器人真正的IP,然後我把它變成了「遠程MySQL」部分爲別人,但結果卻是,再次, 一模一樣。

回答

0
  • 遠程主機的IP地址。如果你寫的主機名,該主機名必須解析爲IP和MySQL必須配置爲解析主機名(也有不同的方法來配置MySQL)
    • hostname -f
    • host c9.io
  • 驗證遠程服務器上3306端口是遠程機器的開啓或IP
    • iptables -L -n |grep 3306
    • iptables -L -n |grep IP_remote_machine
  • 如果有開放防火牆或沒有防火牆,在mysql上搜索問題。MySQL服務器上mysql的朗姆酒控制檯(在某些circunstantes交友工具上交友遠程訪問帳戶的接口出現故障)

以下try代碼(這取決於你的mysql服務器的mysql -u根 - P的配置可能需要憑據)

[email protected]:~# mysql 
MariaDB [(none)]> SELECT user, host, password FROM mysql.user WHERE user LIKE 'user_with_permission'; 
+----------------+--------------------+-------------------------------------------+ 
| user   | host    | password         | 
+----------------+--------------------+-------------------------------------------+ 
| user_perm_remo | XXX.31.31.227  | *3ED850F72DSHWBDS195D51D6A18EEFE0149DDA3F | 
| user_perm_remo | XX.45.170.221  | *3ED850F72DSHWBDS195D51D6A18EEFE0149DDA3F | 
| user_perm_remo | localhost   | *3ED850F72DSHWBDS195D51D6A18EEFE0149DDA3F | 
| user_perm_remo | XX.184.17.102  | *3ED850F72DSHWBDS195D51D6A18EEFE0149DDA3F | 
| user_perm_remo | kvm401.xxxxxxx.com | *3ED850F72DSHWBDS195D51D6A18EEFE0149DDA3F | 
| user_perm_remo | xxxxxxx.com  | *3ED850F72DSHWBDS195D51D6A18EEFE0149DDA3F | 
| user_perm_remo | %.xxxxxxx.com  | *3ED850F72DSHWBDS195D51D6A18EEFE0149DDA3F | 
| user_perm_remo | xxx.33.112.218  | *3ED850F72DSHWBDS195D51D6A18EEFE0149DDA3F | 
+----------------+--------------------+-------------------------------------------+ 
8 rows in set (0.00 sec) 

若不是你遠程連接一對用戶/主機/密碼,你得到你的MySQL服務器上的錯誤權限。您需要手動添加用戶。

GRANT ALL PRIVILEGES ON DATABASESNAME TO 'USERNAME'@'HOSTNAME_FDQN_OR_IP' IDENTIFIED BY 'PASSWORD'; FLUSH PRIVILEGES; 

如果以後這工作沒有連接(這也是前最佳實踐),你必須檢查:

  • 測試你的防火牆和MySQL設置關閉從您的機器

    的telnet遠程conecctions mysql_server 3306

  • 你的mysql日誌。閱讀你的my.conf以知道mysql錯誤日誌(通常位於/var/lib/mysql/.err)和讀取錯誤。如果錯誤是爲了解決mysql問題,它就在這裏。

注意:如果您的主機有一個動態的IP必須使用%,持續到動態IP授予遠程訪問。您可以使用%。%。%。%並調整爲只允許您的遠程計算機的可能Ip塊。

相關問題