远程连接前的准备工作
确保MySQL允许远程访问
默认情况下,MySQL仅允许本地连接(localhost
),需修改配置:
-- 登录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;
修改MySQL配置文件
- 打开配置文件(路径因系统而异):
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu sudo nano /etc/my.cnf # CentOS
- 找到
bind-address
并修改:bind-address = 0.0.0.0 # 允许所有IP访问(或指定服务器IP)
配置服务器防火墙
- 开放MySQL默认端口(3306):
sudo ufw allow 3306/tcp # Ubuntu sudo firewall-cmd --permanent --add-port=3306/tcp # CentOS sudo firewall-cmd --reload
重启MySQL服务
sudo systemctl restart mysql # Ubuntu/Debian sudo systemctl restart mysqld # CentOS
命令行远程连接步骤
基础连接命令
mysql -h [远程服务器IP] -u [用户名] -p
- 示例:
mysql -h 192.168.1.100 -u remote_user -p
输入密码后即可进入MySQL交互界面。
指定端口和数据库
mysql -h 203.0.113.5 -P 3307 -u db_user -p -D my_database
-P 3307
:非默认端口时使用-D my_database
:直接进入指定数据库
安全增强方案
使用SSH隧道加密连接
ssh -L 3306:localhost:3306 user@remote_server_ip
- 在本地新终端连接:
mysql -h 127.0.0.1 -u remote_user -p
数据通过SSH加密传输,避免暴露3306端口。
限制访问IP范围
授权时指定来源IP:
CREATE USER 'secure_user'@'192.168.1.%' IDENTIFIED BY 'Password!';
定期更新密码
ALTER USER 'remote_user'@'%' IDENTIFIED BY 'New_StrongPass456!';
常见错误与解决
-
ERROR 1130 (HY000): Host ‘xxx.xxx.xxx.xxx’ is not allowed
- 检查用户是否授权给该IP:
SELECT host, user FROM mysql.user;
- 确认
bind-address
未设置为0.0.1
。
- 检查用户是否授权给该IP:
-
ERROR 2003 (HY000): Can’t connect to MySQL server
- 防火墙未开放端口:
sudo ufw status
- MySQL服务未运行:
sudo systemctl status mysql
- 网络不通:
ping 远程服务器IP
- 防火墙未开放端口:
-
连接缓慢
- 在
my.cnf
中增加:skip-name-resolve
(禁用DNS反向解析)。
- 在
最佳实践总结
- 最小权限原则:仅授予用户必要权限(避免
GRANT ALL
)。 - 强制加密:生产环境使用SSL或SSH隧道。
- 定期审计:检查
mysql.user
表,清理无效账户。 - 备份配置:修改
my.cnf
前备份:sudo cp /etc/my.cnf /etc/my.cnf.bak
。
引用说明:本文操作基于MySQL 8.0官方文档,防火墙配置参考Linux man手册,安全建议遵循OWASP数据库安全标准,实践前请确认环境兼容性,敏感操作建议在测试环境验证。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7450.html