python - 无法从 Cloud9 python 应用程序连接到 MySQL 数据库(托管在 arvixe 中)

标签 python mysql connection external cpanel

我有一个托管在“arvixe”中的 MySQL 数据库(由 cPanel 管理)。我可以通过我的电脑上的“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, "Can't connect to MySQL server on 'weongame.com' (110)")

我刚刚在 cPanel 上找到了“Remote MySQL”部分。我不知道必须在那里引入的确切 IP,因此我编写了 c9.io(作为主机名和 IP 地址),与 https://forms-bot-ceuxdruman.c9users.io 相同。 (其中 Cloud9 表示我的应用程序正在运行,尽管它是一个简单的脚本,而不是网页/Web 应用程序)以及询问我的 Cloud9 工作区的 Ubuntu 控制台的 IP 地址。但在引入所有这些之后(考虑到IP可能是动态的),结果是完全相同的。

我也知道 arvixe 允许这种外部连接,所以这不是一个可能的原因。

知道什么可能导致错误吗?提前致谢。

编辑:我用过

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

找出运行我的机器人的真实IP,然后我将其像其他人一样包含在“远程MySQL”部分中,但结果再次完全相同。

最佳答案

  • 远程主机的 IP。如果你写主机名,这个主机名必须解析为IP并且mysql必须配置为解析主机名(配置mysql有不同的方法)
    • 主机名-f
    • 主机 c9.io
  • 验证远程服务器上的 3306 端口是否打开或远程计算机的 IP
    • iptables -L -n |grep 3306
    • iptables -L -n |grep IP_remote_machine
  • 如果防火墙打开或没有防火墙,请在mysql上搜索问题。 mysql 服务器上的朗姆酒 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 设置

    telnet mysql_server 3306

  • 你的 mysql 日志。阅读 my.conf 以了解 mysql 错误日志在哪里(通常在/var/lib/mysql/.err 上)并读取错误。如果错误是mysql问题,就在这里。

注意:如果您的主机有动态 IP,则必须使用 % 来授予对动态 IP 的远程访问权限。您可以使用 %.%.%.% 并调整为仅授予对远程计算机的可能 Ip 的阻止。

关于python - 无法从 Cloud9 python 应用程序连接到 MySQL 数据库(托管在 arvixe 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36815205/

相关文章:

python - 用python填写javascript?

python - 如何使用 Django Tables 2 有条件地渲染链接列?

python - Sqlalchemy 在查询过程中失去连接

javascript - 您能捕获连接错误吗?

安卓蓝牙连接错误

python - 如何将整数添加到列表中的每个元素?

python - 为什么使用 haversine 地理定位公式的曼哈顿距离不准确? [Python]

php - MySQL 数据显示异常

php - 提高mysql中的查询性能

c++ - C++ 的 RDP 协议(protocol)