MySQL无法连接通常不是单一原因导致的,需从网络、服务、权限、配置四个层面逐步排查。重点先确认服务是否运行、端口是否可达、用户是否有远程访问权限。
检查MySQL服务是否正常运行
服务未启动是最常见的连接失败原因。在服务器上执行以下命令验证:
Linux:运行 systemctl status mysqld 或 service mysql status,查看状态是否为“active (running)” Windows:打开“服务”管理器,确认 “MySQL80” 或对应实例名的服务状态为“正在运行” 若服务停止,Linux用 sudo systemctl start mysqld 启动;Windows右键启动服务确认MySQL监听地址和端口
默认MySQL只监听本地(127.0.0.1),远程客户端无法连接。需检查配置文件中绑定设置:
编辑 /etc/my.cnf(Linux)或 my.ini(Windows),查找 bind-address 配置项 若值为 127.0.0.1 或 localhost,改为 0.0.0.0(允许所有IP)或指定服务器IP 同时确认 port=3306 未被注释或修改;重启MySQL使配置生效 用 netstat -tuln | grep :3306(Linux)或 netstat -ano | findstr :3306(Windows)验证端口是否监听在正确地址验证用户权限与认证方式
MySQL 8.0+ 默认使用 caching_sha2_password 插件,部分客户端不兼容;且新用户默认无远程访问权限:
登录MySQL后执行:SELECT user, host FROM mysql.user; 确认目标用户(如root)的host是否包含‘%’或具体客户端IP 若host为‘localhost’,则只能本机连接;需授权远程访问:CREATE USER 'user'@'%' IDENTIFIED BY 'pwd'; GRANT ALL ON *.* TO 'user'@'%'; FLUSH PRIVILEGES; 如遇“Client does not support authentication protocol”,可临时降级插件:ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';检查防火墙与网络连通性
即使服务运行且监听正确,中间网络设备也可能拦截连接请求:
服务器防火墙需放行3306端口:Linux执行 sudo ufw allow 3306 或 sudo firewall-cmd --permanent --add-port=3306/tcp;Windows检查“高级安全防火墙”入站规则 从客户端执行 telnet server_ip 3306 或 nc -zv server_ip 3306 测试端口是否可达 云服务器(如阿里云、腾讯云)还需在安全组中手动添加3306端口入方向规则连接问题看似复杂,但按服务→端口→权限→网络的顺序逐层验证,90%的情况都能快速定位。关键是别跳步,尤其别假设“服务肯定起来了”或“端口肯定通了”。
