我收到错误:
“在'读取初始通信数据包时失去与MySQL服务器的连接,系统错误:0”
当我要连接我的数据库时。
如果我使用localhost,一切正常。 但是,当我使用下面的实时IP地址时,它会收到错误:
mysql_connect("202.131.xxx.106:xxxx", "xxxx", "xxxxx") or die(mysql_error());
答案 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.allow
和hosts.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地址。必须这样做才能设置复制。无论如何,我通过做两件事来解决它:
e.g。
CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
答案 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秒,很高兴再次尝试。可以尝试的东西(如果您使用的是类似设置)
mysql -u [username] -p [database]
之类的终端通过终端以相同的用户/密码连接到MySQL吗?这将检查用户权限问题等。答案 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 。
在工作台中,选择+添加新连接并设置以下内容:
测试连接。应该会成功,然后点击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个步骤,然后为我工作。
bind-address = "YOUR MACHINE IP"
位于 /etc/my.cnf 的<{1}}文件
按命令重新启动服务:my.cnf
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
在我的本地应用程序中导致了一些错误。