mysql:尝试使用远程 IP 连接到 localhost 时连接被拒绝

Posted

技术标签:

【中文标题】mysql:尝试使用远程 IP 连接到 localhost 时连接被拒绝【英文标题】:mysql: connection refused when trying to connect to localhost using remote IP 【发布时间】:2012-10-23 14:03:58 【问题描述】:

当我尝试使用远程 ip 地址连接到本地 mysql 数据库时,访问被拒绝。当我尝试从外部机器连接到同一个数据库时,它可以正常工作。当我使用 localhost 连接到本地数据库时,它也可以正常工作。例如,如果数据库服务器的 ip 为 1.2.3.4,那么我会得到以下结果:

# From the db server
mysql -u username -h localhost -p #works perfectly
mysql -u username -h 127.0.0.1 -p #works perfectly
mysql -u username -h 1.2.3.4 -p #Access denied

# From any other machine
mysql -u username -h 1.2.3.4 -p #works perfectly

我可以做些什么来允许使用其远程 IP 地址对我的数据库进行本地访问?数据库服务器操作系统为Fedora 15,MySQL版本为5.5.23。

【问题讨论】:

您正在运行防火墙吗?防火墙设置是什么? “连接被拒绝”提示网络设置。如果 mysql 拒绝访问,它会这样说:“ERROR 1130 (HY000): Host '1.2.3.4' is not allowed to connect to this MySQL server” @Justinᚅᚔᚈᚄᚒᚔ - 我正在运行 ip-tables,但没有别的。 @Olaf - 对不起,我犯了一个错误:我得到了ERROR 1045 (28000): Access denied,不是连接被拒绝。 【参考方案1】:

尝试将bind-address = 0.0.0.0 编辑/添加到/etc/mysql/mysql.conf.d/mysqld.cnf 文件的[mysqld] 部分并重新启动MySQL 服务

【讨论】:

文件甚至不存在。 @FeloVilches 尝试使用find /etc -name mysqld.cnf 来定位您的配置文件。如果不存在,请尝试以root 用户身份在此路径创建它。 谢谢,这已经帮我解决了 这条评论帮助了我3年后,非常感谢。【参考方案2】:

我自己找到了解决问题的方法,但我仍然不太明白为什么它不起作用:

我在主机 % 和 localhost 上授予该用户权限:

# Before
+-----------------+------------+
| Host            | User       |
+-----------------+------------+
| %               | username   |
| localhost       | username   |
+-----------------+------------+

通过这些设置,我得到了上面显示的结果。当我在主机上向该用户授予权限时,它突然起作用了。

# After
+-----------------+------------+
| Host            | User       |
+-----------------+------------+
| %               | username   |
| localhost       | username   |
| <myIpAddress>   | username   |
+-----------------+------------+

显然 % 确实适用于远程连接,但不适用于本地连接。

【讨论】:

【参考方案3】:

此特定问题可能是由主机名解析引起的。

我已经通过从我的 my.cnf 配置文件中删除这个变量来解决这个问题:

跳过名称解析

当然,要么通过放置井号 # 来注释变量,要么在确保备份后将其从 my.cnf 中删除。

【讨论】:

以上是关于mysql:尝试使用远程 IP 连接到 localhost 时连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 连接到远程 MySQL 数据库?

从远程服务器连接到 Amazon EC2 上的 mysql

如何连接到远程机器上的 docker mysql 容器

无法与远程用户连接到MySQL(托管在Ubuntu VPS上)

使用 PHP 连接到远程 MySQL 数据库的网页

连接到另一个IP(服务器)上的MySQL,PHP [重复]