【发布时间】:2011-08-10 23:31:25
【问题描述】:
我收到错误:
“在'读取初始通信包时丢失与MySQL服务器的连接,系统错误:0”
当我要连接我的数据库时。
如果我使用 localhost 一切正常。 但是当我使用如下所示的实时 IP 地址时,会出现错误:
mysql_connect("202.131.xxx.106:xxxx", "xxxx", "xxxxx") or die(mysql_error());
【问题讨论】:
我收到错误:
“在'读取初始通信包时丢失与MySQL服务器的连接,系统错误:0”
当我要连接我的数据库时。
如果我使用 localhost 一切正常。 但是当我使用如下所示的实时 IP 地址时,会出现错误:
mysql_connect("202.131.xxx.106:xxxx", "xxxx", "xxxxx") or die(mysql_error());
【问题讨论】:
【讨论】:
打开名为 my.cnf 的 mysql 配置文件并尝试找到“bind-address”,这里将设置(127.0.0.1 或 localhost)替换为您的实时服务器 ip(您在 mysql_connect 函数中使用的 ip)
这绝对可以解决问题。
谢谢
【讨论】:
127.0.0.1,因此无法从其他主机直接访问。这可以防止远程暴力攻击,并且不会将可能的安全问题暴露给网络。如果您的应用程序位于同一台机器上(这是一种非常常见的托管设置),请使用 127.0.0.1 resp。 localhost 作为 mysql 主机,它的工作方式与将服务绑定到您的外部接口并将其用作 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
【讨论】:
FLUSH PRIVILEGES。
设置新的从服务器时遇到此问题。发现主服务器/etc/hosts.allow文件中缺少从服务器IP地址。添加了 IP 地址,它让我可以连接到主服务器。
请注意,我使用hosts.allow 和hosts.deny 来控制访问。
【讨论】:
deny 有ALL: ALL 时找到allow 中需要的设置...
我遇到了这个问题,结果是之前的系统管理员更改了 MySQL 运行的端口。 MySQL Workbench 试图连接到默认的 3306,但服务器在 20300 上运行。
【讨论】:
这个错误意味着它没有从它期望找到服务器的端口收到响应。原因包括联系错误的机器(由于多种原因之一)到服务器不在预期的端口上。
在 /etc/mysql/my.cnf 中检查您的服务器绑定到哪个端口。这是否与您的连接语句中的内容相对应。如果它们匹配,则尝试从服务器本身和运行客户端的机器的命令行连接 mysql。如果它在一个地方而不是另一个地方工作,那么您可能有防火墙/路由器配置问题。
【讨论】:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61) 的响应,而不是Lost connection to MySQL server 消息。
我的问题是 MySQL 只绑定到 linux 上的 lo。 为了解决问题,我编辑了 my.cnf(位于 /etc/mysql/my.cnf)删除了 bind-address=127.0.0.1
行这允许mysql绑定到任何网络接口
【讨论】:
我刚刚在 Windows 机器上设置了 mysql。当我试图在同一个盒子上连接 Navicat MySql 客户端时,我得到了 OP 的错误。我必须将 127.0.0.1 指定为主机,然后就可以了。
localhost,或者服务器的实际ip地址都不起作用。
【讨论】:
我在尝试使用 MySQL Workbench 6.3 连接到 Google Cloud SQL 时出现此错误。
经过一番研究,我发现我的 IP 地址已被互联网提供商更改,并且不允许在 Cloud SQL 中使用。
我授权了,又回去工作了。
【讨论】:
还有一个原因……
我遇到了一个 Ubuntu 服务器,其中所有内容都是自定义的,并且由于同样的错误而无法连接。
这个设置在/etc/ssh/sshd_config里面
PermitTunnel no
变成后
PermitTunnel yes
我能够远程连接到我的 MySQL 数据库
【讨论】:
从 MySQL 工作台连接时,我遇到了同样的错误。这是我修复它的方法。我的 /etc/my.cnf 配置文件将绑定地址值设置为服务器的 IP 地址。必须这样做才能设置复制。无论如何,我通过做两件事来解决它:
例如
CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
【讨论】:
对我来说,问题是 DNS 查询被子网内的 FW 阻止。解决方案是在 MySQL 中禁用 DNS 查找。
【讨论】:
对我来说,找到配置文件“/etc/mysql/mysql.conf.d/mysqld.cnf”注释掉绑定地址就可以了。
正如我们在这里看到的: 现在默认只监听而不是跳过网络 localhost 更兼容且安全性更高。
【讨论】:
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/… 中的描述进行设置,干得好!谢谢!
我正在尝试在 Ubuntu 18.04 上连接我的数据库 docker 容器,同样的问题。
首先通过运行nmcli dev检查您的设备以检查设备docker0是否已连接。
如果没有连接,尝试重启docker服务:
sudo service docker restart
【讨论】:
我尝试在端口3306 上通过远程服务器创建telnet。
错误信息很清楚
Host 'x.x.x.x' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'Connection closed by foreign host.
由于服务器 mysqladmin flush-hosts 上的 root 完全正常工作!
【讨论】:
就我而言,我在 hosts.deny 中有 ALL:ALL。将其更改为 ALL:PARANOID 在通过 ssh 连接时解决了我的问题
【讨论】:
这个问题对我来说很愚蠢。
我曾经在 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 连接用户。
我监督了这个,所以这也占了我半个小时的时间,所以我希望这对你有用。
【讨论】:
遇到同样的问题,绑定地址来回无济于事。我的解决方案是刷新权限。
mysql> FLUSH PRIVILEGES;
【讨论】:
我遇到了同样的问题。我检查并尝试设置 AllowTcpForwarding Yes 但它在我的 sshd_config 中丢失所以没有帮助。我没有更改 sshd_config 或 my.cnf。确保 ssh 主机名 NOT 与 mysql 主机名相同(使用 localhost)。
在工作台中,选择 + 添加新连接并设置以下内容:
测试连接。应该成功然后点击OK.Viola!
【讨论】:
Firewalld 阻止 IP 地址。因此要授予访问权限,请使用以下命令:
firewall-cmd --permanent --zone=trusted --add-source=YOUR_IP/32
firewall-cmd --permanent --zone=trusted --add-port=3306/tcp
firewall-cmd --reload
【讨论】:
我在使用localhost 时遇到了同样的错误。我重新启动了 MySQL 服务,它工作正常。
【讨论】:
对我来说,在 mysql/my.cnf 中设置 bind-address = 0.0.0.0 有效。它基本上会监听所有地址(但仍然是一个端口)。
别忘了重启你的服务器:systemctl restart mysql
【讨论】:
我只是遇到了同样的问题,但就我而言,我解决了它
服务 mysqld 启动
【讨论】:
在我的情况下,是大学 wifi 阻塞了端口 3306。我能够使用移动热点进行连接。
更改为移动热点或其他网络,如果它在那里工作,那么您知道原始网络阻塞了端口 3306。如果您在多个网络上遇到相同的错误,那么您知道它特定于您的机器。
【讨论】:
我在安装 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
【讨论】:
远程连接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 导致本地应用出现一些错误。
【讨论】:
我有同样的问题。为了解决这个问题,我只是将主机从 localhost:3306 更改为 localhost。因此,当您为连接选择不正确的端口时,可能会出现错误。最好保持默认。
【讨论】:
-P 3306
数据库目录读写权限也是我发现的一个问题。 只需确保您的应用程序能够在 db 位置上读取文件即可。尝试 chmod 777 进行测试。
【讨论】:
如果您的配置文件中不存在 bind-address 并且 mysql 托管在 AWS 实例上,请检查您的安全组。在理想情况下,入站规则应接受来自端口 3306 的所有连接,出站规则应响应所有有效 IP。
【讨论】: