在Linux环境下部署MySQL服务后,默认的安全策略会限制数据库仅允许本地回环地址连接,无法直接通过外部客户端远程访问。要实现远程登录功能,需要从配置调整、权限分配、网络规则设置三个维度逐步操作,以下是完整的实现步骤。

一、环境准备与前置检查
首先确认当前Linux系统中MySQL服务的运行状态,以及现有用户的权限情况。使用以下命令检查MySQL服务是否正常运行:
# 检查MySQL服务状态 systemctl status mysql # 若服务未运行,执行启动命令 systemctl start mysql
同时登录MySQL本地客户端,查看当前用户的主机限制信息:
-- 登录本地MySQL mysql -u root -p -- 查看用户及允许登录的主机 SELECT user, host FROM mysql.user;
默认情况下root用户的host字段值为localhost,表示仅允许本地登录。
二、修改MySQL配置文件
MySQL的配置文件通常位于/etc/mysql/mysql.conf.d/mysqld.cnf或者/etc/my.cnf,需要修改绑定地址让服务监听所有网络接口。
使用编辑器打开配置文件:
# 使用vim编辑配置文件 vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到bind-address配置项,默认值为127.0.0.1,将其修改为0.0.0.0,表示监听所有可用的网络接口:
# 修改前 bind-address = 127.0.0.1 # 修改后 bind-address = 0.0.0.0
保存配置文件后,重启MySQL服务使配置生效:
systemctl restart mysql
三、授权远程登录用户权限
修改配置文件后,还需要在MySQL内部为用户分配远程登录的权限,有两种常用的授权方式。
3.1 授权现有用户远程登录
如果希望直接使用root用户远程登录,可以修改root用户的主机限制为任意地址:
-- 授权root用户从任意主机登录,密码替换为实际的root密码 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_root_password' WITH GRANT OPTION; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
其中%表示匹配所有主机地址,实际生产环境中建议替换为具体的客户端IP地址,提升安全性。
3.2 新建专用远程用户
为了安全起见,不建议直接使用root用户开启远程权限,可以新建一个专用用户:
-- 创建远程用户,用户名为remote_user,密码为remote_password CREATE USER 'remote_user'@'%' IDENTIFIED BY 'remote_password'; -- 授予该用户所有数据库的所有权限 GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION; -- 刷新权限 FLUSH PRIVILEGES;
四、调整系统防火墙规则
Linux系统默认会开启防火墙,需要放行MySQL默认的3306端口,否则外部请求会被防火墙拦截。
4.1 使用ufw防火墙的系统
# 放行3306端口 ufw allow 3306/tcp # 重新加载防火墙规则 ufw reload
4.2 使用firewalld防火墙的系统
# 放行3306端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent # 重新加载防火墙规则 firewall-cmd --reload
五、验证远程登录
在外部客户端机器上,使用以下命令测试是否可以远程连接MySQL:
# 替换为实际的MySQL服务器IP地址和用户名 mysql -h 192.168.0.1 -u remote_user -p
输入密码后若能成功进入MySQL命令行,说明远程登录配置完成。
六、常见问题排查
- 若连接提示
Access denied,检查用户权限是否刷新,密码是否正确 - 若连接提示
Can't connect to MySQL server,检查MySQL服务是否重启,防火墙是否放行端口,bind-address是否修改正确 - 若仅部分IP可以连接,检查用户授权的host字段是否为对应IP或者
%
| 配置项 | 默认值 | 远程开启后值 | 作用 |
|---|---|---|---|
| bind-address | 127.0.0.1 | 0.0.0.0 | 控制MySQL监听的网络接口 |
| 用户host字段 | localhost | %或指定IP | 控制用户允许登录的主机范围 |
| 防火墙3306端口 | 拦截 | 放行 | 允许外部请求访问MySQL服务端口 |
MySQLLinux远程登录grant_privileges修改时间:2026-06-23 03:21:16