我有一个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;作为其他部分的部分,但结果再次完全相同。
答案 0 :(得分:0)
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设置
telnet mysql_server 3306
你的mysql日志。阅读你的my.conf,了解mysql错误日志的位置(通常在/var/lib/mysql/.err上)并读取错误。如果对于mysql问题有误,那就在这里。
注意:如果您的主机具有动态IP,则必须使用%来授予对动态IP的远程访问权限。您可以使用%。%。%。%并调整为仅授予远程计算机可能的Ip块。