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

时间:2016-04-23 19:07:01

标签: python mysql connection external cpanel

我有一个MySQL数据库托管在" arvixe" (由cPanel管理)。我可以通过" MySQL Workbech"连接到它。从我的电脑上,所以我说我正确地创造了它。

我有一个托管在Cloud9中的python应用程序(Telegram bot),所以我使用下一个代码连接到数据库:

import MySQLdb

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

结果是,经过很长一段时间(我说任何一种&#34;超时&#34;),控制台显示下一个追溯:

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,&#34;无法连接到MySQL服务器&#39; weongame.com&#39;(110)&# 34)

我刚刚找到了#34;远程MySQL&#34;关于cPanel的部分。我不知道我必须在那里引入的确切IP,所以我写了c9.io(作为主机名和IP地址),同样适用于https://forms-bot-ceuxdruman.c9users.io(其中Cloud9表示我的应用正在运行,虽然它是一个简单的脚本,而不是一个网页/ webapp)和IP地址要求我的Cloud9工作区的Ubuntu控制台。但在介绍了所有这些之后(考虑到IP可能是动态的),结果完全相同。

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

有什么可能导致错误的想法?提前谢谢。

编辑:我用过

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

找出运行我的机器人的真实IP然后我把它包含在&#34;远程MySQL&#34;作为其他部分的部分,但结果再次完全相同。

1 个答案:

答案 0 :(得分:0)

  • 远程主机的IP。如果你写主机名,这个主机名必须解析为IP,mysql必须是config for resolve hostname(有不同的方法来配置mysql)
    • hostname -f
    • host 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块。