【问题标题】:Connect to remote MySQL via Python通过 Python 连接到远程 MySQL
【发布时间】:2015-05-05 06:46:49
【问题描述】:

我已经在远程服务器上安装了 MySQL。我还通过 SSH 创建了一些数据库,其中包含一些表。

我创建了以下用户:

CREATE USER 'myname'@'localhost' IDENTIFIED BY 'mypassword';
CREATE USER 'remotMe'@'myIP' IDENTIFIED BY 'mypassword';

GRANT PRIVILEGES * . * TO 'myname'@'localhost';
GRANT PRIVILEGES * . * TO 'remoteMe'@'myIP';

现在,我想通过 Python 连接到这个 MySQL 服务器。我已经安装了PyMySQL。我正在尝试以下代码:

import pymysql
conn = pymysql.connect(host='ServerIP', port=3306, user='remoteMe', passwd='mypassword', db='myDB') 

但这给了我一个connection refused 错误。我需要配置其他东西来完成这项工作吗?

【问题讨论】:

  • 先检查是否已经使用 MySQL 客户端成功连接到 MySQL 服务器。如果没有,很可能您对 MySQL serer 的远程访问还没有工作
  • 检查 MySQL 服务器必须监听的远程服务器开放端口。
  • @btquanto 我尝试使用 Navicat,但它给了我以下错误:Lost connection to MySQL server at 'reading initial communication packet', system error: 0@Lafada 我如何检查这个?

标签: python mysql database server


【解决方案1】:

MySQL 很可能绑定到本地主机。假设您使用的是 Linux 机器:

在您的远程机器上,编辑/etc/mysql/my.cnf

找到bind-address=127.0.0.1,将其编辑为bind-address=0.0.0.0,或者直接删除该行。

重启 MySQL

阅读更多:http://dev.mysql.com/doc/refman/5.1/en/server-options.html#option_mysqld_bind-address

【讨论】:

  • 当我这样做时,我可以通过本地主机和远程连接到 MySQL 吗?
  • 你应该是。更改它将允许您绑定到任何网络接口
  • 来自 MySQL 文档:如果地址是 0.0.0.0,则服务器接受所有服务器主机 IPv4 接口上的 TCP/IP 连接。如果地址是“常规” IPv4 地址(例如 127.0.0.1),则服务器仅接受针对该特定 IPv4 地址的 TCP/IP 连接。
  • 我更改了my.cnf 文件并重新启动了 MySQL,但是当我在本地机器上运行 Python 代码时仍然收到连接被拒绝错误。
  • 从 Navicat 连接怎么样?
【解决方案2】:

connection refused 错误消息实际上意味着无法打开 TCP 套接字。服务器拒绝连接。这与身份验证或用户权限无关,因为拒绝发生在涉及 MySQL 服务器之前的 OS 级别。可能的原因有:

  • MySQL服务器只绑定本地主机→设置监听地址为服务器真实IP地址或mysql.conf中的0.0.0.0
  • 中间有防火墙 → 重新配置/停用防火墙
  • 您的连接详细信息(服务器/端口)错误 → 请再次检查

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    相关资源
    最近更新 更多