在“读取初始通信包”时与 MySQL 服务器失去连接,系统错误: 0

我犯了一个错误:

”在读取初始通信包时与 MySQL 服务器失去连接,系统错误: 0

而我要连接我的数据库。

如果我使用的是 localhost,那么一切正常。 但是当我像下面这样使用我的活动 IP 地址时,它出错了:

mysql_connect("202.131.xxx.106:xxxx", "xxxx", "xxxxx") or die(mysql_error());
685524 次浏览

有人认为这可能是防火墙的问题:

我刚刚遇到这个问题,发现它是我的防火墙。我使用 PCTools Firewall Plus,它不允许完全访问 MySQL。一旦我改变,它是罚款。希望能帮上忙。

会是这样吗?

另外,有人建议,这可能是因为 MySQL 服务器被绑定到环回 IP (127.0.0.1/localhost) ,这有效地切断了您与“外部”的连接。

如果是这种情况,您需要将脚本上传到 webserver (它可能也在运行 MySQL 服务器) ,并将您的服务器主机保持为“ localhost”

打开名为 my.cnf 的 mysql 配置文件并尝试找到“ bind-address”,在这里将设置(127.0.0.1 OR localhost)替换为活动服务器 ip (在 mysql _ connect 函数中使用的 ip)

这肯定能解决问题。

谢谢

在设置新的从服务器时遇到此问题。发现主服务器 /etc/hosts.allow文件中的从服务器 IP 地址不见了。添加了 IP 地址,它让我连接到主服务器。

请注意,我使用 hosts.allowhosts.deny来控制访问。

我的案例中的问题是 MySQL 只绑定到 Linux 上的 lo。 为了解决这个问题,我编辑了 my.cnf (可以在/etc/mysql/my.cnf 中找到) ,删除了 bind-address = 127.0.0.1这一行

这允许 mysql 绑定到任何网络接口

我的问题是 DNS 查询被子网内的 FW 阻塞了。解决方案是在 MySQL 中禁用 DNS 查找。

我遇到了这个问题,结果是之前的系统管理员更改了运行 MySQL 的端口。MySQLWorkbench 试图连接到默认的3306,但服务器在20300上运行。

这个错误意味着它没有从它希望找到服务器的端口接收到响应。原因包括联系错误的计算机(出于多种原因之一)和服务器不在预期端口上。

检查服务器绑定到/etc/mysql/my.cnf 中的哪个端口。这是否与您的连接语句中的内容相符。如果它们匹配,那么尝试从服务器本身和运行客户端的机器的命令行连接 mysql。如果它在一个地方工作,而不是在另一个地方,那么您可能有一个防火墙/路由器配置问题。

我在从 MySQL 工作台连接时遇到了同样的错误。我是这么修的。我的/etc/My.cnf 配置文件将 bind-address 值设置为服务器的 IP 地址。为了设置复制,必须这样做。总之,我做了两件事解决了这个问题:

  1. 创建一个可用于从 my.cnf 文件中的绑定地址进行连接的用户

例如:。

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. 更改 MySQL 工作台中连接详细信息中的 MySQL 主机名值以匹配绑定地址

对于我设置 bind-address = 0.0.0.0mysql/my.cnf工作。它基本上监听所有地址(但仍然一个端口)然后。

别忘了重启你的服务器: systemctl restart mysql

在我的情况下,我有所有: 所有在主机。否认。将此更改为 ALL: PARANOID 在通过 ssh 连接时解决了我的问题

我刚在一个窗口框上设置了 mysql。当我试图连接同一个机器上的 Navicat MySql 客户端时,我得到了 OP 的错误。我必须指定127.0.0.1作为主机,这就明白了。

Localhost 或服务器实际的 IP 地址都不能工作。

我在尝试使用 MySQL Workbench 6.3连接到 Google Cloud SQL 时发生了这个错误。

经过一些调查,我发现我的 IP 地址已经被互联网提供商改变,他不允许在云 SQL。

我批准了,然后回去工作了。

当远程连接到 Mysql 时,我得到了错误。 我在 /var/log/mysqld.log上看到过这样的警告:

[Warning] IP address 'X.X.X.X' could not be resolved: Temporary failure in name resolution

我刚刚在 /etc/hosts文件中添加了这一行:

X.X.X.X some_name

问题解决了! 没有使用 skip-name-resolve导致我的本地应用程序在连接到 MySQL 时出现了一些错误。

1)允许远程连接到 MySQL。 编辑文件:

>sudo nano /etc/mysql/my.cnf

留言:

#bind-address       = 127.0.0.1

重启 MySQL:

>sudo service mysql restart

2)为远程连接创建用户。

>mysql -uroot -p


CREATE USER 'developer'@'localhost' IDENTIFIED BY 'dev_password';
CREATE USER 'developer'@'%' IDENTIFIED BY 'dev_password';


GRANT ALL ON *.* TO 'developer'@'localhost';
GRANT ALL ON *.* TO 'developer'@'%';

3)在我的情况下,我需要用 Ubuntu 从 Windows 远程连接到 VirtualBox 机器。因此,我需要在 iptables 中允许端口3306:

>iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

我也有同样的问题。为了解决这个问题,我只是将 host 从 localhost: 3306更改为 just localhost。因此,当您为连接选择不正确的端口时,可能会出现错误。最好让它违约。

这个问题对我来说很愚蠢。

我曾经在 AWS EC2 Ubuntu 机器上遇到过同样的问题(MariaDB 目前安装在本地) ,所以我尝试使用 SSH 隧道,也遇到了同样的问题。所以我试着通过终端设备进入隧道:

ssh -L13306:127.0.0.1:3306 root@ip.address -i my/private/key.pem

它告诉我:

请以用户“ ubuntu”而不是用户“ root”登录。

我将 ssh 用户从 root 改为 ubuntu,就像我的 ssh 配置一样,它连接得很好。

因此,请检查您的 SSH 连接用户。

我监督了这个,所以这也是我半个小时的时间,所以我希望这对你有用。

遇到同样的问题,系结地址来来回回没有用。我的解决办法是 冲水特权

mysql> FLUSH PRIVILEGES;

数据库目录读写权限也是我发现的一个问题。 请确保您的应用程序能够在 db 位置上读取文件。

我已经做了以下3个步骤,然后为我工作。

  1. 位于 < em >/etc/my.cnf 的 my.cnf文件中的 bind-address = "YOUR MACHINE IP"

  2. 通过命令重新启动服务: service mysql restart

  3. GRANT ALL PRIVILEGES ON yourDB.* TO 'username'@'YOUR_APPLICATION_IP' IDENTIFIED BY 'YOUR_PASSWORD' WITH GRANT OPTION;

Firewalld阻止 IP 地址。因此,为了给予访问权限,使用以下命令:

防火墙-cmd —— forever —— zone = trust —— add-source = YOUR _ IP/32

防火墙-cmd —— forever —— zone = trust —— add-port = 3306/tcp

防火墙-cmd-重新加载

我只是有同样的问题,但在我的情况下,我解决了它

服务 mysqld 启动

对我来说,配置文件“/etc/mysql/mysql.con.d/mysqld.cnf”注释出绑定地址起到了作用。

正如我们在这里看到的: 现在的默认设置是只监听,而不是跳过网络 本地主机兼容性更好,安全性也不差。

我也面临同样的问题。我检查并试图设置 是的,但是在 sshd _ config 中找不到它,因此没有帮助。确保 ssh 主机名与 mysql 主机名相同(使用 localhost)。

在 workbench 中,选择 + 添加新的连接并设置如下:

  • 连接方法: 通过 SSH 的标准 TCP/IP
  • SSH 主机名: 192.168.050:22(替换远程 SSH 服务器 IP 和端口(可选))
  • SSH 用户名: 嘘嘘
  • 您可以在提示符下设置密码或添加
  • 主机名: Localhost 或127.0.0.1
  • MYSQL 服务器端口: 3306
  • 您可以在提示符下设置密码或添加

测试连接。它应该是成功的,然后点击 OK。中提琴!

还有一个原因。

我碰到了一个 Ubuntu 服务器,所有东西都是自定义的,因为同样的错误而无法连接。

这个设置在 /etc/ssh/sshd_config内部

PermitTunnel no

在变成

PermitTunnel yes

我可以远程连接到我的 MySQL 数据库

如果配置文件中没有 bind-address,并且 mysql 驻留在 AWS 实例上,请检查安全组。在理想情况下,入站规则应该接受来自端口3306的所有连接,而出站规则应该响应所有有效的 IP。

我试图在 Ubuntu 18.04上连接我的数据库 码头集装箱,同样的问题。

首先通过运行 nmcli dev检查设备,以检查设备 docker0是否连接。

如果未连接,请尝试重新启动 Docker 服务:

sudo service docker restart

我也有过类似的错误(通过 MYSql Workbench 在 aws 上连接 MYSQL)。我以前连接得很好,但突然之间它就不工作了,再也不工作了)。我的连接是通过由 keyfile 保护的 SSH 连接的。

结果发现我是在计时。因此,我将 SQL 连接超时时间增加到30秒(默认为10秒) ,并且可以再次使用。可以尝试的事情(如果你处于类似的环境中)

  1. 您可以从终端直接 ssh 到服务器(检测与密钥文件权限等问题) ?
  2. 然后你能通过终端连接到 MySQL 与相同的用户/pwd 使用类似 mysql -u [username] -p [database]的东西?这将检查用户权限等问题。
  3. 如果这两个工作,那么您的参数不是问题,也许同样的超时问题像我(除了它从来没有说超时错误,而是要求检查权限等)

有限的磁盘空间可能导致此错误。

检查你的磁盘空间

$ df -h

如果有100% 使用过的磁盘,则尝试增加空间。

在我的例子中: 我有 Vagrant (8.0.1) box (Ubuntu16.04)我的 mysql 磁盘容量是10GB,我把它增加到20GB

$ sudo lvextend -L20G -r /dev/mapper/homestead--vg-mysql--master

然后重启 mysql

$ sudo service mysql restart

在我的情况下,是大学无线网络阻塞端口3306。我可以通过移动热点连接。

更改到移动热点或其他网络,如果它在那里工作,那么您就知道原始网络阻塞端口3306。如果您在多个网络上得到相同的错误,那么您就知道它是特定于您的计算机的。

如果在远程连接时遇到此错误,请在 cpanel 中转到 remote mysql 选项,然后在 Host 中添加% (允许使用% 通配符)。

我在通过代理服务器连接 MySQL 服务器时遇到了这个问题。在我的情况下,一周前它工作得很好,我没有对我的连接或服务器设置做任何更改。

凭直觉,我决定进入代理服务器 SSH,看看它是否仍在工作,一旦我这样做了,我就会被提示更新我的 UNIX 密码,因为它已经过期了。重置密码允许我通过代理再次连接。

我尝试在端口 3306上制作一个 telnet over 远程服务器。 错误消息很清楚

Host 'x.x.x.x' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'Connection closed by foreign host.

因为 root在服务器 mysqladmin flush-hosts工作!

  • 我的码头集装箱是3306,但在 Dockerfile 是33060。我把 Docker 集装箱的端口编辑到33060

  • 必须已经添加到 Dockerfile

    ENV MYSQL _ ROOT _ HOST 172.17.0.1

我在使用 localhost时也出现了同样的错误。我重新启动了 MySQL 服务,它工作得很好。

我在安装 MySQL docker 映像时遇到了同样的问题,当时我试图从 WSL2 MySQL 客户端进行连接。

正如在接受的答案中所说的,这应该是一个防火墙问题,在我的案例中,这个错误是由于不允许 docker for windows 与私有网络通信造成的。

我更改了“防火墙和网络保护”,“允许应用程序通过防火墙”,“更改设置”(需要管理员权限) ,并允许“ Docker 桌面后端”连接到专用网络。

我在 Mac 上安装本地 MySQL 时也出现了同样的错误。问题是 MySQL 打开的文件数量对 MacOS 来说太多了。

要查看您是否有相同的问题,您可以运行这个命令并查找 File Descriptor错误:

tail -200 /usr/local/var/mysql/$(whoami).err | grep "Warning"

我将这一行添加到 my.cnf 文件中,问题就解决了:

table_open_cache = 200

当我在 M1中使用 docker 时,我得到了这个错误: 对我来说,问题是 docker 容器一旦启动就会退出。当我使用 docker network ls时,它不显示网络中的容器。因此,重新构建一个活动的容器解决了我的问题。

遇到同样的问题,对我有效的是:

  1. 到允许申请的 Windows 防火墙。
  2. MySQL 可能不在列表中,所以需要添加它,它的路径通常是 C:/Program Files (x86)/MySQL/bin/MySQL
  3. 标记私有和公共网络,应用。

我在过去遇到过这个错误,原因有点琐碎,主要原因是我在使用 mysql 之前使用了 Postger,而且邮资端口与 mysql 的端口不同。我希望他们可以利用发生在我身上的错误,在使用任何其他解决方案之前,我必须检查端口

“端口”: “3306”

  DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': <Database_name>,
'USER':'root',
'PASSWORD':'',
'HOST':'localhost',
'PORT': '3306',
}
}

对我起作用的是以下几点:

打开 my.cnf 文件并添加

innodb_file_per_table = OFF

而且,here是禁用这种每表一个文件的配置的优点和缺点。