MySQL 5.7 默认拒绝远程 root 连接,因 root@localhost 权限记录限制;需修改 bind-address=0.0.0.0、用 CREATE USER/ALTER USER 指定 mysql_native_password 插件、GRANT 授权、FLUSH PRIVILEGES,并开放防火墙及云安全组 3306 端口。

MySQL 5.7 默认拒绝所有远程 root 连接,不是密码或防火墙问题,而是权限记录中 host 字段为 'localhost' —— 必须显式创建或修改用户记录,否则任何 -h 192.168.x.x 或公网 IP 的连接都会报 ERROR 1045 (28000): Access denied。
修改 bind-address 让 MySQL 监听外部网络
MySQL 默认只绑在 127.0.0.1,即使你用 -h 127.0.0.1 连,走的也可能是 socket(取决于 client 配置),更不会响应外网请求。
- 编辑配置文件:
/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf(CentOS 7 多见后者) - 在
[mysqld]段下找到或添加:bind-address = 0.0.0.0(监听所有 IPv4 接口) - 强烈建议同时加一行:
skip-name-resolve,避免 DNS 反查拖慢连接或失败 - 保存后必须重启服务:
systemctl restart mysqld,仅 reload 不生效
用 CREATE USER + GRANT 创建带认证插件的远程 root 用户
MySQL 5.7+ 默认使用 caching_sha2_password 插件,但很多客户端(如旧版 HeidiSQL、部分 Python 驱动)不支持,直接对 'root'@'localhost' 执行 UPDATE user SET host='%'... 会因插件不兼容导致连接失败。
MySQL 数据库管理技能,能够通过自然语言查询和管理数据库,支持 SELECT/INSERT/UPDATE/DELETE、表管理、备份恢复等操作。当用户提及 MySQL、数据库查询、建表或数据备份时使用此技能。
- 不要直接改
mysql.user表,优先用 SQL 命令创建新用户: CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123!';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;FLUSH PRIVILEGES;- 如果必须复用原 root 账户,先确认当前插件:
SELECT user, host, plugin FROM mysql.user WHERE user='root'; - 再执行:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123!';
开放系统防火墙与云平台安全组
即使 MySQL 已监听 0.0.0.0 且权限正确,iptables、firewalld 或云厂商(阿里云/腾讯云)的安全组仍会拦截 3306 端口。
- CentOS 7 默认用
firewalld:firewall-cmd --permanent --add-port=3306/tcp,然后firewall-cmd --reload - 若用
iptables:iptables -I INPUT -p tcp --dport 3306 -j ACCEPT,并保存规则 - 云服务器务必检查控制台里的「安全组」规则——它比系统防火墙优先级更高,漏配就完全连不通
- 测试是否通:从远程机器运行
telnet your-server-ip 3306,有响应说明端口可达;无响应先查这层
远程连接时指定 host 和插件才真正生效
客户端命令里不写 -h 或写 -h localhost,仍会走本地 socket,无法触发远程权限逻辑。
- 必须显式指定服务端 IP:
mysql -h 192.168.56.11 -u root -p - 某些客户端(如早期 HeidiSQL)需在连接设置里手动选认证方式为
mysql_native_password - 如果用 Navicat 或 DBeaver,连接失败时看错误日志里是否含
plugin caching_sha2_password could not be loaded,那就是插件不匹配 - 生产环境切勿长期保留
'root'@'%'—— 应创建专用账号,限定 IP 段(如'appuser'@'10.0.42.%')并按需授最小权限
最容易被忽略的是认证插件和安全组的双重校验:改了 host 却没换插件,或开了 firewalld 却忘了云平台安全组,都会让整个配置看起来“明明都做了却连不上”。每次变更后,分层验证:端口通 → MySQL 登录成功 → 客户端工具连上。

















