OpenEuler 24.02 -mysql 8.0.6远程连接失败解决方案

排查步骤
  1. 确定mysql真的能在Linux上运行

    ps aux | grep mysql    # 可能是 mysqld、mariadbd 等
    
  • 检查root密码(是否为空)及认证插件

    SELECT user, host, plugin, authentication_string FROM mysql.user WHERE user='root';
    

    查看 root@% 是否有密码(authentication_string 不能为空),以及插件类型

    • 如果插件时 auto_scoket ,则远程连接必失败
    • 如果插件时 caching_sha2_password ,老客户端可能需要更换插件为 mysql_native_password

检查网络监听端口:

ss -tlnp | grep 3306

或者

netstat -tlnp | grep 3306

在这里插入图片描述

  • 输出 0.0.0.0:3306::3306 → 正常(监听所有接口)
  • 输出 127.0.0.1:3306 → 只监听了本地,需要在 /etc/my.cnf 中将 bind-address 改为 0.0.0.0 或服务器 IP,然后重启 MySQL。

检查MySQL用户权限

检查远程连接是否成功,不仅仅时localhost

SELECT user, host FROM mysql.user WHERE user = '要连接的用户名';
  • 如果host列只有localhost 或127.0.0.1 -> 只允许本地连接

解决方法:

授权任意用户远程连接并刷新用户权限

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY '密码';
FLUSH PRIVILEGES;

检查本地防火墙权限

防火墙需要放行mysql端口

firewalld系统

firewall-cmd --list-all					#查看当前防火墙规则
firewall-cmd --permanent --add-port=3306/tcp	#添加规则,放行3306端口'
firewall-cmd --reload					#重启防火墙

iptables 直接管理

iptables -L INPUT -n --line-numbers | grep 3306   # 查是否有 ACCEPT

iptables -I INPUT -p tcp --dport 3306 -j ACCEPT   # 无则添加

如果嫌防火墙干扰测试,可临时关闭:

systemctl stop firewalld

iptables -P INPUT ACCEPT   # 慎用,清空规则或改为全放

检查云服务商的安全组(如果是云主机)

阿里云/腾讯云/AWS 等控制台里的安全组规则是独立于服务器的外层防火墙。

  • 入方向必须放行 TCP:3306
  • 务必检查源 IP 是否为你的公网出口(也可先设 0.0.0.0/0 测试,通过后收紧)
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐