如何配置mysql网络环境_mysql访问连通性设置

来源:这里教程网 时间:2026-02-28 20:42:10 作者:

MySQL 默认绑定 localhost 导致远程无法连接

MySQL 8.0+ 默认配置

bind-address = 127.0.0.1
,只监听本地回环接口,外部主机发来的 TCP 连接请求会被直接拒绝。这不是权限问题,而是网络层根本没暴露端口。

检查当前绑定地址:
grep "bind-address" /etc/mysql/mysql.conf.d/mysqld.cnf
改为监听所有 IPv4 接口:
bind-address = 0.0.0.0
(或指定内网 IP,如
192.168.1.100
改完必须重启服务:
sudo systemctl restart mysql
验证是否生效:
ss -tlnp | grep :3306
—— 输出中应含
0.0.0.0:3306
或对应 IP,而非仅
127.0.0.1:3306

用户账号未授权远程主机访问

即使 MySQL 监听了外部 IP,

CREATE USER 'u'@'localhost'
这类账号仍无法从其他机器登录。MySQL 的用户是「用户名 + 主机名」联合唯一标识,
'u'@'%'
'u'@'localhost'
是两个完全不同的账户。

确认现有用户允许的 host:
SELECT User, Host FROM mysql.user;
若需允许任意 IP(测试用):
CREATE USER 'dev'@'%' IDENTIFIED BY 'pass123'; GRANT ALL ON *.* TO 'dev'@'%'; FLUSH PRIVILEGES;
生产环境建议限定范围:
'dev'@'192.168.1.%'
'dev'@'10.0.2.5'
注意:MySQL 8.0 默认认证插件是
caching_sha2_password
,某些旧客户端不兼容,可显式指定:
CREATE USER 'dev'@'%' IDENTIFIED WITH mysql_native_password BY 'pass123';

防火墙拦截 3306 端口

Linux 防火墙(

ufw
firewalld
)或云服务器安全组规则会默认丢弃非白名单端口的入站流量,MySQL 连接超时(而非拒绝)往往就是这个原因。

Ubuntu/Debian(ufw):
sudo ufw allow 3306
,再
sudo ufw status
确认规则已生效
CentOS/RHEL(firewalld):
sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload
阿里云/腾讯云等平台:必须在控制台「安全组」中手动添加入方向规则,协议类型选
TCP
,端口范围填
3306
,源 IP 建议限制为具体开发机 IP,而非
0.0.0.0/0

连接时提示 “Host … is not allowed to connect”

该错误明确指向权限层面,但实际可能由多个环节叠加导致。不要只盯着

GRANT
语句,先排除网络和防火墙干扰。

mysql -h 127.0.0.1 -u dev -p
在本机测试 —— 若成功,说明 MySQL 服务正常,问题出在远程访问路径
telnet your-server-ip 3306
从客户端测试连通性 —— 若连接失败,99% 是防火墙或
bind-address
配置问题
确保客户端连接命令中指定的是服务器真实 IP,不是
localhost
(它会走 socket 而非 TCP)
MySQL 8.0 启用
skip-name-resolve
可避免 DNS 反查失败导致的延迟或拒绝,建议在
[mysqld]
段添加该配置并重启

网络连通性是分层验证的:物理可达 → 端口开放 → MySQL 监听 → 账号授权。任何一层卡住都会表现为“连不上”,但错误现象和排查手段完全不同。尤其注意

bind-address
和防火墙这两处,它们比账号权限更常被忽略。

相关推荐