mysql如何配置远程访问_mysql网络权限设置

7次阅读

mysql远程连接失败需依次检查五环节:bind-address配置、user表host权限、MySQL 8.0认证插件兼容性、云安全组策略、系统防火墙规则。

mysql如何配置远程访问_mysql网络权限设置

bind-address 限制了谁也连不上

MySQL 默认只监听 127.0.0.1,哪怕你改了用户权限、开了防火墙,远程连接照样失败——因为请求根本没进 MySQL 进程。关键配置在 /etc/mysql/my.cnf(或 /etc/my.cnf)里,找到这一行:

bind-address = 127.0.0.1

把它注释掉(加 #),或者改成 bind-address = 0.0.0.0(监听所有 IPv4 地址)。改完必须重启服务:systemctl restart mysqlubuntu/debian)或 systemctl restart mysqldcentos/RHEL)。

user 表 host 字段决定“能不能登录”

即使网络通了,MySQL 还会查 mysql.user 表:只有 userhost 同时匹配,才允许登录。默认的 'root'@'localhost' 只认本机,远程来的 'root'@'192.168.1.100''root'@'%' 是完全不同的账号。

  • 不要直接 UPDATE user SET host='%' WHERE user='root' —— 这会覆盖原有记录,可能引发权限混乱
  • 推荐用 GRANT 创建新账号或扩权:GRANT ALL ON *.* TO 'admin'@'%' IDENTIFIED BY 'your_strong_password';
  • 执行后务必 FLUSH PRIVILEGES;,否则变更不生效

MySQL 8.0 的 plugin 加密方式导致 navicat 报 2059 错误

MySQL 8.0 默认用 caching_sha2_password 插件,但很多客户端(Navicat、旧版 JDBC 驱动)只认 mysql_native_password。现象是:密码没错,但报 Error 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded

解决方法是显式指定插件并重设密码:

ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'your_strong_password';
FLUSH PRIVILEGES;

注意:不是改 authentication_string 字段,而是用 IDENTIFIED WITH 语法;如果用户不存在,先 CREATE USERALTER

别忘了云服务器的安全组和本地防火墙

本地改完,远程还是连不上?大概率卡在中间层:

  • 腾讯云/阿里云/AWS 等都有「安全组」,默认关闭 3306 端口,必须手动放行(源 IP 可设为 0.0.0.0/0 或限定具体 IP 段)
  • linux 本机防火墙也要开:firewall-cmd --permanent --add-port=3306/tcp + firewall-cmd --reload
  • 检查是否误启了 skip-grant-tables(配置文件里有这行就全关权限校验,但也会导致授权失效)

真正能连上的链路是:远程客户端 → 云安全组 → 服务器防火墙 → MySQL bind-address → user 表 host+plugin+密码校验。漏掉任意一环,都是 “access denied” 或 “Connection refused”。

text=ZqhQzanResources