【问题标题】:Can't connect to MySQL database (hosted in arvixe) from Cloud9 python app无法从 Cloud9 python 应用程序连接到 MySQL 数据库(托管在 arvixe 中)
【发布时间】:2016-08-17 08:19:13
【问题描述】:

我有一个托管在“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, "Can't connect to MySQL server on 'weongame.com' (110)")

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

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

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

编辑:我用过

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

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

【问题讨论】:

    标签: python mysql connection external cpanel


    【解决方案1】:
    • 远程主机的 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。

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 2017-01-10
      相关资源
      最近更新 更多