2016-04-23 57 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块。

相关问题