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

时间:2011-04-22 13:17:04

标签: php mysql

我收到错误:

  

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

当我要连接我的数据库时。

如果我使用localhost,一切正常。 但是,当我使用下面的实时IP地址时,它会收到错误:

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

35 个答案:

答案 0 :(得分:89)

有人here表示可能是防火墙问题:

  

我刚遇到这个问题,发现这是我的防火墙。我使用PCTools Firewall Plus,它不允许完全访问MySQL。一旦我改变了它就没事了。希望有所帮助。

可能是吗?

此外,有人here表示可能是因为MySQL服务器绑定到环回IP(127.0.0.1 / localhost),这有效地阻止了你从“外部”连接。

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

答案 1 :(得分:38)

打开名为my.cnf的mysql配置文件并尝试查找“bind-address”,这里用你的live server ip替换设置(127.0.0.1 OR localhost)(你在mysql_connect函数中使用的ip)

这肯定会解决问题。

由于

答案 2 :(得分:21)

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

答案 3 :(得分:15)

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

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

答案 4 :(得分:7)

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

答案 5 :(得分:5)

尝试使用MySQL Workbench 6.3连接到Google Cloud SQL时,发生了此错误。

经过一番研究后,我发现我的IP地址已被互联网服务提供商更改,并且他不被允许进入Cloud SQL。

我授权并重新开始工作。

答案 6 :(得分:5)

我的问题是MySQL只绑定到linux上的lo。 为了解决问题,我编辑了my.cnf(在/etc/mysql/my.cnf找到)删除行绑定地址= 127.0.0.1

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

答案 7 :(得分:3)

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

答案 8 :(得分:3)

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

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

答案 9 :(得分:3)

我只是在Windows框中设置了mysql。尝试在同一个盒子上连接Navicat MySql客户端时出现OP错误。我不得不指定127.0.0.1作为主机,并且得到了它。

localhost或服务器实际的ip地址都不起作用。

答案 10 :(得分:2)

从MySQL工作台连接时遇到了同样的错误。这是我如何解决它。我的/etc/my.cnf配置文件的bind-address值设置为服务器的IP地址。必须这样做才能设置复制。无论如何,我通过做两件事来解决它:

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

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

答案 11 :(得分:2)

在我的情况下,我在hosts.deny中拥有ALL:ALL。将此更改为ALL:PARANOID在通过ssh连接时解决了我的问题

答案 12 :(得分:1)

我在使用 const box = new THREE.Box3().setFromObject( model ); const center = box.getCenter( new THREE.Vector3() ); object.position.x += ( object.position.x - center.x ); object.position.y += ( object.position.y - center.y ); object.position.z += ( object.position.z - center.z ); 时遇到了同样的错误。我重新启动了 MySQL 服务,它运行良好。

答案 13 :(得分:1)

在我的情况下,这是大学wifi阻止端口3306。我能够使用移动热点进行连接。

更改为移动热点或其他网络,如果该网络可以正常工作,则说明原始网络正在阻止端口3306。如果在多个网络上遇到相同的错误,则说明该错误特定于您的计算机。

答案 14 :(得分:1)

对我来说,找到配置文件“/etc/mysql/mysql.conf.d/mysqld.cnf”注释掉绑定地址就行了。

我们在这里可以看到:   而不是跳过网络,默认情况下现在只能监听  localhost,它更兼容并且安全性更低。

答案 15 :(得分:1)

我遇到了同样的问题,但就我而言,我用

解决了这个问题
  

service mysqld start

答案 16 :(得分:1)

我尝试通过端口telnet上的远程服务器创建3306。 错误消息很清楚

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可以正常工作!

答案 17 :(得分:1)

进入同样的问题,来回绑定地址无济于事。我的解决方案是刷新权限

mysql> FLUSH PRIVILEGES;

答案 18 :(得分:1)

这个问题对我来说非常愚蠢。

我曾经在AWS EC2 Ubuntu机器上遇到同样的问题(MariaDB暂时安装在本地),所以我尝试进行SSH隧道,并遇到了同样的问题。所以我试着通过终端ssh隧道:

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

它告诉了我:

  

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

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

请检查您的SSH连接用户。

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

答案 19 :(得分:1)

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

不要忘记重新启动服务器:systemctl restart mysql

答案 20 :(得分:0)

  • 我在Docker容器中有3306端口,但在Dockerfile中是33060。我在Docker容器中将端口编辑为33060

  • 必须已添加到Dockerfile

    ENV MYSQL_ROOT_HOST 172.17.0.1

答案 21 :(得分:0)

我有通过代理服务器连接到MySQL服务器的问题。就我而言,前一周工作正常,并且我没有对连接或服务器设置进行任何更改。

出于预感,我决定通过SSH进入代理服务器以查看它是否仍在工作,并且一经提示我便更新了我的UNIX密码,因为该密码已过期。重置密码后,我可以通过代理再次连接。

答案 22 :(得分:0)

我在安装 MySQL docker 镜像然后尝试从 WSL2 MySQL 客户端连接时遇到了同样的问题。

正如已接受的答案中所述,这应该是防火墙问题,在我的情况下,此错误是由于不允许 docker for windows 与专用网络通信而引起的。

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

答案 23 :(得分:0)

如果您遇到从远程连接的erorr,请转到cpanel中的远程mysql选项,然后在Host中添加%(允许使用%通配符)。

答案 24 :(得分:0)

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

检查磁盘空间

$ df -h

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

在我的情况下:我有Vagrant(8.0.1)框(Ubuntu 16.04),我的mysql磁盘容量为10GB,我将其增加到20GB

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

然后重新启动mysql

$ sudo service mysql restart

答案 25 :(得分:0)

我有一个类似的错误(通过MYSql Workbench在aws上连接到MYSQL)。我以前连接正常,但突然间它停止工作,只是再也无法工作了)。我的连接是通过受密钥文件保护的SSH。

结果证明我正在超时。因此,我将SQL连接超时时间从默认的10秒增加到30秒,很高兴再次尝试。可以尝试的东西(如果您使用的是类似设置)

  1. 您可以直接从终端SSH到服务器(检测密钥文件权限等问题)吗?
  2. 然后您可以使用mysql -u [username] -p [database]之类的终端通过终端以相同的用户/密码连接到MySQL吗?这将检查用户权限问题等。
  3. 如果这两个都起作用,则您的参数不是问题,可能是和我一样的超时问题(除非它从未说过超时错误,而是要求检查权限等)

答案 26 :(得分:0)

我正在尝试在Ubuntu 18.04上连接数据库 docker容器,同样的问题。

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

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

sudo service docker restart

答案 27 :(得分:0)

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

答案 28 :(得分:0)

另一个原因...

我遇到了一个Ubuntu服务器,那里的所有内容都是自定义的,并且由于相同的错误而无法连接。

此设置位于/etc/ssh/sshd_config

内部
PermitTunnel no

变成

之后
PermitTunnel yes

我能够远程连接到我的MySQL数据库

答案 29 :(得分:0)

我遇到了同样的问题。我检查并尝试设置 AllowTcpForwarding是,但它在我的sshd_config中丢失了,所以没有帮助。我没有更改sshd_config或my.cnf。确保ssh主机名与mysql主机名相同(使用localhost)。 NOT

在工作台中,选择+添加新连接并设置以下内容:

  • 连接方法:基于SSH的标准TCP / IP
  • SSH主机名: 192.168.0.50:22 (替换远程SSH服务器IP和端口(可选))
  • SSH用户名: sshuser
  • 您可以设置密码或在提示符处添加
  • MYSQL主机名: localhost或127.0.0.1
  • MYSQL Server端口: 3306
  • 您可以设置密码或在提示符处添加

测试连接。应该会成功,然后点击OK。Viola!

答案 30 :(得分:0)

apache防火墙阻止了ip地址。所以要提供访问权限,请使用以下命令:

firewall-cmd --permanent --zone = trusted --add-source = YOUR_IP / 32

firewall-cmd --permanent --zone = trusted --add-port = 3306 / tcp

firewall-cmd --reload

答案 31 :(得分:0)

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

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

  2. 按命令重新启动服务:my.cnf

  3. service httpd restart

答案 32 :(得分:0)

数据库目录读写权限也是我发现的问题。 只需确保您的应用程序能够在db位置上运行文件。尝试使用chmod 777进行测试。

答案 33 :(得分:0)

我有同样的问题。为了解决这个问题,我刚刚将localhost从localhost:3306更改为localhost。因此,当您选择unproper端口进行连接时,可能会出现错误。最好保留默认值。

答案 34 :(得分:0)

远程连接到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

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