MySQL默认仅允许本地连接,需修改bind-address为0.0.0.0、授权远程用户并开放3306端口(含系统防火墙与云安全组),MySQL 8.0+还需注意认证插件兼容性。

MySQL安装完成后默认只允许本地连接,远程连接被拒绝是常见问题。核心原因通常是绑定地址、用户权限或防火墙限制,需逐项检查。
检查MySQL绑定地址是否允许远程访问
MySQL默认配置为 bind-address = 127.0.0.1,仅监听本地回环地址。需修改为允许外部访问:
- 编辑 MySQL 配置文件(Linux 通常为 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf;Windows 为 my.ini)
- 找到 bind-address 行,改为:
bind-address = 0.0.0.0(监听所有IPv4地址)
或指定服务器IP(如 bind-address = 192.168.1.100) - 保存后重启 MySQL 服务:
sudo systemctl restart mysql(Linux)
net stop mysql && net start mysql(Windows)
确认远程用户存在且授权正确
root 用户默认可能只允许 localhost 登录,需显式创建或授权远程用户:
- 登录 MySQL:mysql -u root -p
- 查看当前用户及主机:
SELECT User, Host FROM mysql.user; - 若需允许 root 从任意主机远程登录(不推荐生产环境):
CREATE USER 'root'@'%' IDENTIFIED BY '你的强密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES; - 更安全的做法:创建专用远程用户,如:
CREATE USER 'remote_user'@'192.168.1.%' IDENTIFIED BY '安全密码';
GRANT SELECT, INSERT ON mydb.* TO 'remote_user'@'192.168.1.%';
FLUSH PRIVILEGES;
检查系统防火墙是否放行3306端口
即使MySQL已监听0.0.0.0,防火墙仍可能拦截外部连接请求:
- Linux(ufw):
sudo ufw allow 3306
sudo ufw status 确认规则生效 - Linux(firewalld):
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload - Windows:在“高级安全 Windows 防火墙”中新建入站规则,允许 TCP 3306 端口
- 云服务器(如阿里云、腾讯云):还需在安全组中手动开放 3306 端口,这是常被忽略的关键一步
验证连接与排错建议
完成上述配置后,用客户端工具(如 MySQL Workbench、Navicat 或命令行)测试:
- 从远程机器执行:
mysql -h 服务器公网IP -P 3306 -u remote_user -p - 若提示 ERROR 2003 (HY000): Can't connect to MySQL server:
先用 telnet 服务器IP 3306 测试端口是否可达;不通则重点查防火墙或安全组 - 若提示 Access denied for user:
说明认证失败,检查用户名、密码、Host匹配(注意 % 和具体IP的区别),以及是否执行了 FLUSH PRIVILEGES - MySQL 8.0+ 注意:默认认证插件为 caching_sha2_password,部分旧客户端不兼容,可建用户时指定:
CREATE USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';










