[英]Can't connect to MySQL database (hosted in arvixe) from Cloud9 python app
我在“ arvixe”中托管了一個MySQL數據庫(並由cPanel管理)。 我可以通過PC上的“ MySQL Workbech”連接到它,因此我認為自己創建正確。
我在Cloud9中托管了一個python應用程序(一個Telegram機器人),因此我使用下面的代碼連接到數據庫:
import MySQLdb
# Open database connection
db = MySQLdb.connect("weongame.com","weonwii_ceux","<here my pass>","weonwii_Forms_Bot")
結果是,經過很長時間(我認為是任何一種“超時”),控制台都會顯示下一個回溯:
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年,“無法連接到'weongame.com'上的MySQL服務器(110)”)
我剛剛在cPanel上找到了“遠程MySQL”部分。 我不知道必須在此處引入的確切IP,所以我寫了c9.io(作為主機名和IP地址),對於https://forms-bot-ceuxdruman.c9users.io (其中Cloud9說我的應用程序正在運行,盡管它是一個簡單的腳本,而不是網頁/ webapp),並且IP地址詢問我的Cloud9工作區的Ubuntu控制台。 但是在全部引入之后(考慮到IP可能是動態的),結果是完全一樣的。
我也知道arvixe允許這種外部連接,所以這不是可能的原因。
任何可能導致錯誤的想法? 提前致謝。
編輯 :我用
import socket
socket.gethostbyname(socket.gethostname())
找出運行我的機器人的真實IP,然后將其與其他IP一樣包含在“ Remote MySQL”部分中,但結果還是完全一樣。
hostname -f
host c9.io
iptables -L -n |grep 3306
iptables -L -n |grep IP_remote_machine
嘗試以下代碼(根據您的mysql服務器的配置,可能需要憑據mysql -u root -p)
root@hostanme:~# 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設置
遠程登錄mysql_server 3306
您的mysql日志。 閱讀my.conf以了解mysql錯誤日志在哪里(通常在/var/lib/mysql/.err上)並讀取錯誤。 如果錯誤是針對mysql問題,則在這里。
注意:如果主機具有動態IP,則必須使用%來授予對動態IP的遠程訪問權限。 您可以使用%。%。%。%並進行調整以僅授予對遠程計算機可能的IP的阻止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.