GRANT ALL ON *.* TO '用户名'@'远程IP' IDENTIFIED BY '密码' WITH GRANT OPTION;
,2. **修改配置**:编辑my.cnf
,将bind-address = 127.0.0.1
改为0.0.0.0
,3. **开放端口**:防火墙允许3306端口(如sudo ufw allow 3306
) ,最后重启MySQL服务生效。远程连接Linux MySQL的完整指南
核心原理与前提条件
MySQL默认仅允许本地连接(127.0.0.1),要实现远程访问,需完成三个关键配置:
- 用户授权:创建远程访问专用账户
- 配置文件修改:解除本地绑定限制
- 防火墙放行:开放3306端口
必备条件:
- Linux服务器root权限
- MySQL已安装(建议5.7+或8.0+版本)
- 客户端与服务器网络互通(可通过
ping [服务器IP]
验证)
分步操作指南
步骤1:登录MySQL创建远程用户
mysql -u root -p # 使用root登录 # 创建新用户并授权(推荐) CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; # 或修改root远程权限(生产环境不推荐) UPDATE mysql.user SET host='%' WHERE user='root'; FLUSH PRIVILEGES;
步骤2:修改MySQL配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian # 或 vim /etc/my.cnf # CentOS/RHEL
找到并修改以下参数:
bind-address = 0.0.0.0 # 默认127.0.0.1 skip-networking = OFF # 确保未启用
保存后重启服务:
systemctl restart mysql # 或 mysqld
步骤3:配置防火墙
Firewalld(CentOS/RHEL):
firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload
UFW(Ubuntu/Debian):
ufw allow 3306/tcp ufw reload
IPTables(通用):
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT service iptables save # 或使用iptables-persistent
连接测试与排错
客户端连接命令
mysql -h [服务器IP] -u remote_user -p
常见错误解决方案:
错误代码 | 原因 | 修复方法 |
---|---|---|
ERROR 1130 | 用户未授权 | 检查GRANT 语句中的IP范围 |
ERROR 2003 | 端口不通 | 检查防火墙规则sudo iptables -L -n |
ERROR 1045 | 密码错误 | 重置密码ALTER USER 'user'@'%' IDENTIFIED BY 'new_pwd'; |
ERROR 1524 | 认证插件冲突 | 执行ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd'; |
安全加固建议
- 最小权限原则:
GRANT SELECT,INSERT ON dbname.* TO 'user'@'192.168.1.%'; # 限制IP段和操作权限
- 禁用root远程登录:
DELETE FROM mysql.user WHERE user='root' AND host='%';
- 启用SSL加密传输:
# my.cnf增加 require_secure_transport = ON ssl-ca = /etc/mysql/ca.pem
- 定期审计用户:
SELECT user, host FROM mysql.user; # 检查异常账户
高级配置场景
场景1:通过SSH隧道连接
ssh -L 3306:localhost:3306 user@server_ip # 端口转发 # 客户端连接127.0.0.1:3306
场景2:Docker环境配置
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_REMOTE_USER=remote mysql:8.0 --bind-address=0.0.0.0
验证操作是否成功
SHOW VARIABLES LIKE 'bind_address'; # 应返回0.0.0.0 SELECT user, host FROM mysql.user; # 确认远程用户存在
重要提示:完成配置后,立即执行
mysql_secure_installation
强化安全设置,并定期备份/etc/my.cnf
和用户权限表。
引用说明
- MySQL 8.0官方安全指南 https://dev.mysql.com/doc/refman/8.0/en/security.html
- Linux防火墙最佳实践 Red Hat文档 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/securing_networks/
- 网络连通性检测工具使用手册 ICMP协议RFC 792
基于MySQL 8.0.28及Ubuntu 22.04 LTS测试验证,配置前请务必备份关键数据。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/48130.html