【问题标题】:Python MYSQL will not connectPython MYSQL 无法连接
【发布时间】:2021-11-30 09:35:14
【问题描述】:

我一直在帮助对旧 UBUNTU 16 服务器上的进程进行故障排除。在我们了解它的工作原理之前,我们无法将站点迁移到新服务器,因为我们需要重新创建和排除故障。

基本上它是一个python3脚本,连接到MYSQL数据库并读取一些数据,并在一定条件下更新数据。它基本上与 ZOHO 相关联,因此需要这种编程语言。

该错误已被诊断为 mysql 连接错误。错误 111 连接被拒绝。数据库是本地主机

我已 100% 验证用户名、密码和数据库可见性的访问权限,并且端口 3306 已打开。我可以在 CLU 上使用 MYSQL 命令登录并显示数据库及其表。

连接器 100% 从 config.py 中提取正确的变量,因为我在连接器之前添加了一个 print(HOST, DBASE, USER, PASSWORD) 并验证它们是正确的。

我也试过 127.0.0.1 而不是 localhost。我还(不要拍我)输入 root 用户名和密码以消除任何权限问题

我想知道是否可以扩展 python 中的 mysql 错误,以便我可以非常清楚地了解是什么部分导致了问题。 MYSQL 中是否有任何命令可以用来专门阻止 python。

为了以防万一,我禁用了 UFW,没有任何区别,MYSQL 的一般日志似乎没有包含任何有用的内容

确切的错误:

mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on '127.0.0.1:3306' (111 Connection denied)

注意:服务器是 Ubuntu 16,运行 MYSQL 5.7.26-0ubuntu0.16.04.1,只能访问本地主机。 Python 是 2.7.12

如前所述,这是一台旧服务器,我想尽快报废它,但在我能证明 zoho 连接器是可修复的之前,我们不能继续作为它的阻止程序。

【问题讨论】:

  • 这是一个秘密,或者您为什么不发布确切的错误消息和代码
  • 我的愚蠢;已编辑
  • 请出示我们的pyzhon代码,这与mylsq或python无关,只是你的连接代码错误

标签: mysql python-3.x


【解决方案1】:

您可以在下面的示例中看到。

端口与主机分开

import mysql.connector

cnx = mysql.connector.connect(
    host='localhost',
    database='import_test',
    user='testuser',
    password='password***',
    port=3306
)

【讨论】:

  • 用经过验证的详细信息替换数据库、用户和密码(使用 phpmyadmin 验证)我得到了 mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'localhost:3306' (111 Connection拒绝)请注意,我有这个服务器的另一个版本(克隆),它工作得很好
  • 让我展开。服务器是虚拟的,我们在去年年底克隆了它并进行了一些安全更新,现在这是实时服务器。疫情过后,我们现在正在做我们一直想做的事情。如果它有任何线索,我们也不能在端口 3306 上 TELNET 到 localhost
  • 这适用于我的本地 python 3.9.7 所有库更新和一个 mysql 8.026 Mysql 服务器
  • 我不相信你有一个本地 mysql 服务器正在运行,并且不清楚 phpmyadmin 或 mysql.exe 实际连接的是什么,但正如你声称它们正在工作,chakcm 使用 python 的系统如果有 mysql 服务器则正在运行
  • 这是一个运行 Joomla 实例的 LAMP 服务器和一个 word press 实例。使用 localhost MYSQL 服务启动并运行。 Python 代码连接到 Joomla 数据库,该数据库有一个名为 ZoHo Sync 的自定义表。它使用与 joomla 实例相同的用户名、数据库和密码从表中获取数据
【解决方案2】:

原来是所有问题中最基本的。在我们克隆的旧服务器上,一切都是开放的,零锁定,包括 MYSQL 监听世界。在新服务器上,mysql 已启用跳过网络。

虽然 Web 实例很高兴直接连接到套接字,但 mysql 并没有主动监听端口 3306。我已更改 my.cnf 以启用网络,但另一个问题是阻止这些更改发生。

一旦我让 mysql 在端口 3306 上工作并且我可以看到它正在侦听,python 现在连接正常,所以一些答案是正确的。 MYSQL '不工作;'在全球范围内......然而,这在安全方面是一个倒退。我不希望 MYSQL 向世界开放

所以我修改了代码以使用 /var/run/mysqld/mysqld.sock 的 unix 套接字,重新启用 skip-networking 和瞧.. 现在 python 一切正常,端口 3306 再次关闭,我有了我的第一个python试炼完毕

我的配置文件将 DATABASE 定义为本地主机、USER 和 PASSWORD,但现在 SOCKET 为 /var/run/mysqld/mysqld.sock 而我的代码是

import mysql.connector

from models import ExportRecord

from config import HOST, USER, PASSWORD, DATABASE, SOCKET

def connect():
    return mysql.connector.connect(host=HOST, user=USER, passwd=PASSWORD, database=DATABASE, unix_socket=SOCKET)

【讨论】:

    猜你喜欢
    • 2017-04-09
    • 2022-01-19
    • 2021-03-21
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2011-06-19
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多