解决 MySQL 数据库无法远程连接的问题

在使用 MySQL 数据库时,遇到这样的问题:

本地可以连接 MySQL,但远程机器连接时,总是报错 Host ... is not allowed to connect to this MySQL server

这通常是因为 MySQL 的用户权限或配置限制了远程访问。

1. 登录 MySQL 数据库

首先,使用本地命令行登录 MySQL:

bash 复制代码
mysql -u root -p

输入 root 用户的密码进入数据库。


2. 切换到 mysql 系统库

MySQL 的用户权限存放在 mysql 数据库中,我们需要切换到它:

sql 复制代码
USE mysql;

3. 查看当前用户和主机权限

执行以下命令查看当前 MySQL 用户的 host 设置:

sql 复制代码
SELECT User, Host FROM mysql.user;

你会看到一张表,例如:

复制代码
+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+

注意到 root 用户的 Hostlocalhost,这表示它 只能从本机连接,无法被远程机器连接。

4. 修改 root 用户的 Host 为 %

要允许 root 用户从任意主机连接,需要把它的 Host 改成 %(表示任意主机):

sql 复制代码
UPDATE mysql.user SET host='%' WHERE user='root' AND host='localhost';

5. 刷新权限生效

修改完权限后,需要刷新权限表才能生效:

sql 复制代码
FLUSH PRIVILEGES;

执行以下命令查看当前 MySQL 用户的 host 设置:

sql 复制代码
SELECT User, Host FROM mysql.user;

你会看到一张表,root的host被设置为了%,表示可以接受远程连接

复制代码
+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | %         |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+

不出意外的话,现在你已经可以进行远程连接了,如果还有问题可以进行6-7的排查

6. 检查 MySQL 配置文件

有时候,MySQL 的配置文件 my.cnf(或 my.ini)会限制绑定的地址,默认只监听 127.0.0.1

  • 打开配置文件:

    bash 复制代码
    vim /etc/my.cnf
  • 找到 [mysqld] 部分,修改:

    复制代码
    bind-address = 0.0.0.0

    这表示监听所有 IP,而不仅是本机。

  • 保存后,重启 MySQL:

    bash 复制代码
    systemctl restart mysqld

7. 确认防火墙是否开放 3306 端口

MySQL 默认端口是 3306,linux为例确保服务器防火墙允许远程访问:

bash 复制代码
# 查看防火墙状态
firewall-cmd --list-all

# 开放 3306 端口(仅 firewalld 示例)
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload

8. 总结

要解决 MySQL 无法远程连接的问题,可以按照下面的步骤排查:

  1. 修改 mysql.user 表,把 root 的 Host 改为 %
  2. 刷新权限
  3. 检查是否可以链接,不可以的话需要检查配置和端口防火墙
  4. 检查 my.cnf 配置,确保 bind-address0.0.0.0
  5. 检查防火墙是否开放 3306 端口
相关推荐
2301_803934612 分钟前
SQL如何进行分组后字符串拼接_使用GROUP_CONCAT或STRING_AGG
jvm·数据库·python
爱喝水的鱼丶3 分钟前
SAP-ABAP:数据类型与数据对象(8篇) 第四篇:关系映射篇——从类型定义到对象实例的转化逻辑
开发语言·数据库·学习·sap·abap
csdn小瓯5 分钟前
Pydantic V2 模型校验与配置管理最佳实践
运维·数据库·windows
网管NO.116 分钟前
MySQL、Oracle、PostgreSQL 深度对比,数据库怎么选?
数据库·mysql·oracle
新新学长搞科研24 分钟前
【安徽大学主办】第五届半导体与电子技术国际研讨会(ISSET 2026)
大数据·数据库·人工智能·自动化·信号处理·半导体·电子
SelectDB32 分钟前
PB 级自动驾驶数据秒级检索:Apache Doris 统一多模态数据平台实践
大数据·数据库·数据分析
我叫张小白。35 分钟前
CentOS 7 安装 MySQL 8.0 完整指南(含远程连接配置)
linux·mysql·centos
Gauss松鼠会38 分钟前
【GaussDB】基于SpringBoot实现操作GaussDB(DWS)的项目实战
java·数据库·经验分享·spring boot·后端·sql·gaussdb
難釋懷40 分钟前
Redis内存回收-内存淘汰策略
前端·数据库·redis
一只fish43 分钟前
Oracle官方文档翻译《Database Concepts 26ai》第7章-数据完整性
数据库·oracle