上一篇
Linux MySQL远程连接怎么设置?
- Linux
- 2025-07-07
- 2967
配置MySQL允许远程连接需三步:修改配置文件设置
bind-address=0.0.0.0
;登录MySQL执行
GRANT ALL ON *.* TO 'user'@'特定IP' IDENTIFIED BY '密码' WITH GRANT OPTION;
;最后刷新权限
FLUSH PRIVILEGES;
并开放服务器3306端口防火墙。
前提条件
-
MySQL服务器已安装
确保MySQL服务运行正常:systemctl status mysql # 或 mysqld
-
网络与防火墙配置
- 客户端与服务器网络互通(可通过
ping
测试)。 - 开放MySQL默认端口(3306):
sudo ufw allow 3306/tcp # Ubuntu/Debian # 或 sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload # CentOS/RHEL
- 客户端与服务器网络互通(可通过
配置MySQL远程访问(服务端操作)
步骤1:修改MySQL配置文件
- 编辑配置文件(路径根据系统不同):
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian sudo nano /etc/my.cnf # CentOS/RHEL
- 找到
bind-address
项并修改:bind-address = 0.0.0.0 # 允许所有IP访问(生产环境建议限制IP) # 或注释此行: #bind-address = 127.0.0.1
步骤2:创建远程访问用户并授权
-
登录MySQL:
mysql -u root -p
-
创建专用用户(避免使用root):
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPassword123!'; # '%'允许所有IP
安全建议:将替换为客户端IP(如
'192.168.1.100'
)以限制访问源。 -
授权用户访问数据库:
GRANT ALL PRIVILEGES ON target_db.* TO 'remote_user'@'%'; # 授权特定数据库 -- 或授权所有数据库(谨慎使用): -- GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';
-
刷新权限:
FLUSH PRIVILEGES;
步骤3:重启MySQL服务
sudo systemctl restart mysql # 或 mysqld
客户端测试远程连接
在另一台机器使用MySQL客户端连接:
mysql -h [服务器IP] -u remote_user -p
- 输入密码后成功进入即表示配置正确。
安全加固建议
- 最小权限原则
- 仅授权用户必要的数据库和操作(如
SELECT, INSERT
而非ALL PRIVILEGES
)。
- 仅授权用户必要的数据库和操作(如
- 限制访问IP
- 创建用户时指定客户端IP(如
'remote_user'@'192.168.1.100'
)。
- 创建用户时指定客户端IP(如
- 使用SSH隧道(推荐)
ssh -L 3306:localhost:3306 user@mysql-server-ip
客户端通过
mysql -h 127.0.0.1 -u remote_user -p
连接,数据加密传输。 - 定期更新密码
使用强密码(字母+数字+符号,长度≥12位)。
常见问题解决
-
错误1130: Host ‘xxx’ is not allowed
检查用户授权IP是否包含客户端IP(SHOW GRANTS FOR 'remote_user'
)。 -
错误2003: Can’t connect to MySQL server
- 确认防火墙开放3306端口。
- 检查MySQL配置文件
bind-address
是否设置为0.0.0
。 - 网络路由是否畅通(
telnet [服务器IP] 3306
测试端口)。
-
连接缓慢
在my.cnf
中增加:[mysqld] skip-name-resolve # 禁用DNS反向解析
远程连接MySQL是常见需求,但需严格遵循安全规范,通过绑定IP限制、最小权限授权和SSH隧道,可显著降低风险,定期审计用户权限并更新密码是维护数据库安全的关键措施。
引用说明:本文操作基于MySQL 8.0官方文档及Linux安全最佳实践,配置路径可能因版本差异略有不同,防火墙命令参考Ubuntu/CentOS官方手册,MySQL权限管理详见MySQL GRANT语法。