mysql默认仅允许本地主机连接数据库,要实现远程连接需要完成多项配置调整,从网络层到数据库权限层逐步开放访问能力,以下是完整的操作步骤和相关说明。

一、检查mysql服务端口开放状态
mysql默认使用3306端口通信,首先需要确认服务器防火墙已经开放该端口,允许外部IP访问。如果是云服务器还需要检查安全组规则是否放行3306端口。
1. 服务器防火墙配置(以centos系统firewalld为例)
执行以下命令开放3306端口并重启防火墙:
# 开放3306端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent # 重新加载防火墙规则 firewall-cmd --reload # 查看端口开放状态 firewall-cmd --zone=public --list-ports
2. 云服务器安全组配置
登录云服务器控制台,找到对应实例的安全组规则,添加入站规则,协议选择TCP,端口范围填写3306,授权对象可以根据需要填写允许的客户端IP,若需要允许所有IP访问则填写0.0.0.0/0,但生产环境不建议这么配置。
二、修改mysql配置文件
mysql的配置文件中默认绑定了本地地址,需要修改该配置允许监听所有网络接口。
1. 找到mysql配置文件
不同系统下配置文件路径不同,常见路径如下:
- centos系统:/etc/my.cnf
- ubuntu系统:/etc/mysql/mysql.conf.d/mysqld.cnf
- windows系统:mysql安装目录下的my.ini
2. 修改绑定地址
打开配置文件,找到bind-address配置项,默认值为127.0.0.1,将其修改为0.0.0.0,表示监听所有网络接口的连接请求,修改后保存文件并重启mysql服务。
# 修改前 bind-address = 127.0.0.1 # 修改后 bind-address = 0.0.0.0
重启mysql服务的命令示例(centos系统):
systemctl restart mysqld
三、配置mysql用户远程权限
即使网络和配置层已经开放,mysql自身的用户权限也会限制远程连接,需要为对应的用户授予远程访问权限。
1. 登录本地mysql服务
在mysql所在的服务器上执行以下命令登录数据库:
mysql -u root -p
2. 查看现有用户权限
执行以下sql语句查看当前所有用户的允许访问主机:
SELECT user, host FROM mysql.user;
默认情况下root用户的host字段为localhost,仅允许本地连接。
3. 授权用户远程访问权限
可以根据需要选择两种授权方式:
- 方式一:允许指定IP的客户端连接,将下面的ip_address替换为实际客户端的IP地址
-- 创建新用户并授权(推荐生产环境使用) CREATE USER 'remote_user'@'ip_address' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'ip_address' WITH GRANT OPTION; -- 若需要授权已有用户,执行以下语句 UPDATE mysql.user SET host='ip_address' WHERE user='root';
- 方式二:允许所有IP的客户端连接,仅建议测试环境使用
-- 创建新用户并授权 CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION; -- 若需要授权已有用户,执行以下语句 UPDATE mysql.user SET host='%' WHERE user='root';
执行完成后刷新权限使配置生效:
FLUSH PRIVILEGES;
四、测试远程连接
在客户端机器上执行以下命令测试连接,将server_ip替换为mysql所在服务器的公网IP,remote_user替换为授权的用户名,your_password替换为对应的密码:
mysql -h server_ip -u remote_user -p
如果连接成功会进入mysql命令行界面,若连接失败可以根据错误提示排查问题。
五、常见错误排查
| 错误提示 | 可能原因 | 解决方法 |
|---|---|---|
| Can't connect to MySQL server on 'server_ip' (10061) | 服务器3306端口未开放,或mysql服务未启动 | 检查防火墙、安全组规则,确认mysql服务正常运行 |
| Access denied for user 'user'@'client_ip' (using password: YES) | 用户权限未授权,或密码错误 | 检查用户host配置,确认密码正确,重新刷新权限 |
| Host 'client_ip' is not allowed to connect to this MySQL server | 用户的host字段未包含当前客户端IP | 修改用户host为对应IP或%,重新刷新权限 |
六、安全注意事项
远程连接mysql会带来一定的安全风险,建议遵循以下原则:
- 生产环境不要将用户的host设置为%,尽量指定固定的客户端IP
- 不要使用弱密码,定期更换数据库用户密码
- 如果不需要远程连接,及时关闭3306端口的外网访问权限
- 可以使用SSH隧道的方式替代直接开放3306端口,进一步提升安全性
mysqlremote_connection数据库配置用户权限修改时间:2026-06-29 12:42:30