簡體   English   中英

無法從Cloud9 python應用程序連接到MySQL數據庫(托管在arvixe中)

[英]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”部分中,但結果還是完全一樣。

  • 遠程主機的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服務器上的rum mysql控制台(在某些情況下,用於Cpanel帳戶上的遠程訪問的Cpanel工具失敗)

嘗試以下代碼(根據您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM