上一篇
2025年8月最新动态:近期MySQL 8.4社区版更新中,官方进一步优化了远程连接的安全策略,部分用户反馈升级后出现原有IP白名单失效的情况,如果你突然遇到远程连不上数据库的问题,可能不是你的配置错了,而是新版本在“偷偷”加强安全管控。
遇到这个问题先别抓狂,MySQL默认就是个“宅男”——它只接受本地(localhost)的连接请求,这是出于安全考虑,但如果你需要让其他服务器、同事的电脑或者自家另一台设备访问数据库,就得手动“开门”。
常见报错包括:
ERROR 1130 (HY000): Host 'xxx.xxx.xxx.xxx' is not allowed to connect
Can't connect to MySQL server on 'xx.xx.xx.xx' (10061)
登录MySQL服务器,执行:
SHOW VARIABLES LIKE 'bind_address';
如果结果是 0.0.1
或 localhost
,说明MySQL只接受本地连接,需要修改MySQL配置文件(通常是my.cnf
或my.ini
):
[mysqld] bind-address = 0.0.0.0 # 允许所有IP访问,或改为特定IP
改完记得重启MySQL服务:
sudo systemctl restart mysql # Linux # 或Windows服务管理器重启MySQL服务
MySQL的用户权限是“用户名+来源IP”组合的,即使你本地用root
登录没问题,远程用同样的账号也可能被拒。
查看现有权限:
SELECT host, user FROM mysql.user;
如果看到user@'localhost'
但没有user@'%'
(代表任意IP),就需要授权:
GRANT ALL PRIVILEGES ON *.* TO '你的用户名'@'%' IDENTIFIED BY '密码'; FLUSH PRIVILEGES; # 刷新权限
注意:生产环境建议用'user@'192.168.1.%'
这样的子网限制替代,降低风险。
sudo ufw allow 3306 # Ubuntu示例
如果MySQL改了默认端口(比如为了安全用3307),远程连接时需显式指定端口:
mysql -u 用户名 -p -h 服务器IP -P 3307
可能MySQL的skip-networking
选项被启用(某些安装包默认开启),检查配置文件:
# 确保没有这一行,有就注释掉 # skip-networking
如果服务器支持IPv6,可能需要额外授权:
GRANT ALL ON *.* TO 'user'@'::1'; # IPv6本地 GRANT ALL ON *.* TO 'user'@'2001:db8::/32'; # 指定IPv6段
新版默认使用caching_sha2_password
插件,旧版客户端可能不兼容,解决方案:
ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
root
账号远程连接 mysql.user
表,清理无用账号 本文由 米丽泽 于2025-08-02发表在【云服务器提供商】,文中图片由(米丽泽)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/514014.html
发表评论