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


127

我收到错误消息:

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

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

如果我使用本地主机,则一切正常。但是当我使用如下所示的实时IP地址时,出现了错误:

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

Answers:


104

这里有人建议这可能是防火墙问题:

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

可以吗?

而且这里有人暗示这可能是因为MySQL服务器绑定到了环回IP(127.0.0.1 / localhost),这实际上使您无法从“外部”进行连接。

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


7
你是什​​么意思本地主机?我也面临着同样的问题,并且也仅使用本地主机。应用程序与数据库位于同一台计算机上。你是什​​么意思本地主机?
oneofakind

6
@oneofakind他的意思是连接到“本地主机”而不是“ 127.0.0.1”
Alex Holsgrove

2
我在带有Mamp Pro的OSX上遇到了同样的问题。我通过禁用/重新启用Mamp Pro mysql选项卡上的“允许对mysql的网络访问”复选框来解决此问题。
奥斯曼(Ousmane)

43

打开名为my.cnf的mysql配置文件,并尝试找到“绑定地址”,此处将设置(127.0.0.1 OR localhost)替换为实时服务器IP(在mysql_connect函数中使用的IP)

这肯定会解决问题。

谢谢


2
使用ssh隧道时,请确保使用bind-address = 127.0.0.1或localhost。bitnami出现了此问题,其中绑定地址是机器ip。
z2z

1
Debian 10 + MySQL独立专用服务器的相同问题和解决方案。
Vilq

应该提到的是,通常最好将mysql服务绑定到127.0.0.1适当的位置,这样就不可能从其他主机直接访问。这样可以防止远程暴力攻击,并且不会向网络暴露可能的安全问题。如果您的应用程序位于同一台计算机上(这是非常常见的托管设置),请使用127.0.0.1resp。localhost作为mysql主机,它将与将服务绑定到您的外部接口并将其用作mysql主机的工作方式相同。如果您的应用程序位于其他地方,请尽可能使用内部网络。
David

36

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

1
对我来说,我忘记了在my.cnf上验证bind-address。谢谢。
abkrim

1
这完全有帮助。谢谢!
osehgol

1
工作完美,但我在Windows上使用工作台,所以没有执行步骤3。谢谢!
RohitAneja

尽管最后一个命令对我不起作用,但是以您的方式创建新用户解决了我的问题。我可以从笔记本电脑上在树莓派上访问mysql。谢谢!
EyyüpAlkış

FLUSH PRIVILEGES创建新用户后记得。
Yew Hong Tat

15

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

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


我的连接器/ C ++问题。现在,如果我只能找到什么设置需要的allow时候denyALL: ALL...

这真的救了我的生活,我有连接到从工作台mysql的问题,我需要添加“ALL:127.0.0.1”到/etc/hosts.allow文件中,并开始工作
托马什Tibenský

就我而言,/ etc / hosts的主机IP条目有一个错误(旧)条目。当发布新IP时,它属于旧IP,似乎被忽略了。删除旧IP可修复该错误。
大卫·拉米雷斯

7

我遇到了这个问题,最终成为以前的系统管理员更改了MySQL正在运行的端口。MySQL Workbench试图连接到默认的3306,但是服务器在20300上运行。


1
这个答案的好事。原来,我是自己做的。
warningbug

5

我的问题是MySQL仅绑定到Linux上的lo。为了解决该问题,我编辑了my.cnf(位于/etc/mysql/my.cnf),删除了bind-address = 127.0.0.1行。

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


5

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

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

我授权了它,然后又恢复了工作。


4

从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

非常感谢,我们还进行了MySQL复制,bind-address是本地的:10.0.0.x。我为此解决方案奋斗了几天。
iFadi


3

我只是在Windows框上设置mysql。尝试与同一框上的Navicat MySql客户端连接时出现OP错误。我必须指定127.0.0.1作为主机,然后就可以了。

本地主机,或服务器的实际IP地址均不起作用。


3

该错误表示它没有从预期在其上找到服务器的端口接收到响应。原因包括从联系错误的计算机(出于多种原因之一)到服务器不在预期的端口上。

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


我认为这是不对的,如果在该端口上没有监听,那么您将得到响应ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61),而不是Lost connection to MySQL server消息。
肯·威廉姆斯

2

就我而言,我在hosts.deny中拥有“全部:全部”。更改为全部:通过ssh连接时,PARANOID解决了我的问题


2

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

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

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

它告诉我:

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

就像我的ssh配置一样,我将ssh用户从root更改为ubuntu,并且连接正常。

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

我对此进行了监督,所以这也是我半个小时的时间,因此希望对您有用。


2

对我来说,发现配置文件为“ /etc/mysql/mysql.conf.d/mysqld.cnf”,注释掉绑定地址就可以了。

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


令我感到最大惊喜的是,这是在Debian 10下工作的。我给了它一个机会,而且工作!编辑mysql配置sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf,而不是bind-address = 111.112.113.114我用bind-address = 127.0.0.1。SSH隧道设置已按照hostpresto.com/community/tutorials/…上的说明进行设置。谢谢!
klor


1

对我来说,设置bind-address = 0.0.0.0mysql/my.cnf工作是可行的。然后,它基本上侦听所有地址(但仍然侦听一个端口)。

并且不要忘记重启服务器: systemctl restart mysql


6
所有地址/接口,但只有一个端口。
Zenexer 2015年

1

我只是遇到了同样的问题,但就我而言,我解决了

服务mysqld启动


1

另一个原因...

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

此设置位于内部 /etc/ssh/sshd_config

PermitTunnel no

变成

PermitTunnel yes

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


1

我试图在Ubuntu 18.04上连接我的db docker容器,同样的问题。

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

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

sudo service docker restart


1

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

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


1

Firewalld阻止IP地址。要授予访问权限,请使用以下命令:

防火墙-cmd-永久-区域=受信任--add-source = YOUR_IP / 32

防火墙cmd-永久-区域=受信任--add-port = 3306 / tcp

防火墙cmd-重新加载


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

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


0

我有同样的问题。要修复它,我只是将主机从localhost:3306更改为仅localhost。因此,当您分隔不正确的端口进行连接时,错误可能会出现。最好将其保留为默认值。


1
这可能是因为mysql不接受端口作为主机名的一部分,而是需要使用以下参数-P 3306
Clay H

0

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


0

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

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

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

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


0

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


0

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

  1. bind-address = "YOUR MACHINE IP"/etc/my.cnf中的my.cnf文件中

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

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


0

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

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

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

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

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.