如何搭建mysql远程开发环境_mysql远程连接配置

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

MySQL 默认拒绝远程连接,必须手动放开

MySQL 安装后默认只监听

127.0.0.1
(本地回环),
bind-address
配置为
127.0.0.1
localhost
时,任何外部 IP 都无法建立 TCP 连接,哪怕防火墙已放行端口。这不是权限问题,是网络层直接被拒。

先确认当前监听地址:
sudo netstat -tlnp | grep :3306
如果只看到
127.0.0.1:3306
,说明还没放开
修改配置文件(常见路径:
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/my.cnf
),找到
bind-address
行,改为:
bind-address = 0.0.0.0
(监听所有 IPv4 接口)或指定内网 IP(如
192.168.1.100
改完必须重启服务:
sudo systemctl restart mysql
(Ubuntu/Debian)或
sudo systemctl restart mysqld
(CentOS/RHEL)

用户账号必须显式授权远程访问权限

即使 MySQL 监听了 0.0.0.0,用

root@localhost
登录的账号默认不能从其他 IP 连入。MySQL 的用户是“用户名 + 主机名”联合标识,
'root'@'localhost'
'root'@'%'
是两个完全不同的账号。

登录 MySQL 后,检查现有用户:
SELECT User, Host FROM mysql.user;
若需允许任意主机连接(开发环境可接受,生产严禁):
CREATE USER 'devuser'@'%' IDENTIFIED BY 'strong_password';<br>GRANT ALL PRIVILEGES ON *.* TO 'devuser'@'%' WITH GRANT OPTION;<br>FLUSH PRIVILEGES;
更安全的做法是限定来源 IP:
CREATE USER 'devuser'@'192.168.1.%' IDENTIFIED BY 'strong_password';
注意:MySQL 8.0+ 默认使用
caching_sha2_password
插件,某些旧客户端不兼容,可强制指定插件:
CREATE USER 'devuser'@'%' IDENTIFIED WITH mysql_native_password BY 'strong_password';

防火墙和云服务器安全组常被忽略

Linux 系统防火墙(

ufw
/
firewalld
)和云平台(阿里云、腾讯云等)的安全组规则是两层独立过滤,任一未放行都会导致连接超时(不是拒绝,是无响应)。

Ubuntu 上开放 3306:
sudo ufw allow 3306
CentOS 7+:
sudo firewall-cmd --permanent --add-port=3306/tcp<br>sudo firewall-cmd --reload
云服务器必须在控制台配置安全组入方向规则:协议类型选
TCP
,端口范围填
3306
,源 IP 建议限制为你的开发机公网 IP(或公司出口 IP),避免设为
0.0.0.0/0
验证是否通:从本地执行
telnet your-server-ip 3306
,能连上说明网络层通畅;如果报
Connection refused
,说明 MySQL 没监听或服务没启;如果卡住或报超时,大概率是防火墙/安全组拦截

客户端连接时注意 host 参数和 DNS 解析

很多开发者用

mysql -h 123.123.123.123 -u devuser -p
测试失败,却没意识到 MySQL 服务端可能开启了
skip-name-resolve
,此时它不会反向解析客户端 IP 为域名——但如果你在
GRANT
语句里用了域名(比如
'devuser'@'my-laptop.local'
),而客户端实际 IP 是
192.168.1.50
,就会因主机名不匹配被拒绝。

最稳妥做法:授权时一律用 IP 或通配符(
%
),避免依赖 DNS
检查服务端是否跳过 DNS:
SHOW VARIABLES LIKE 'skip_name_resolve';
若值为
ON
,就别在
Host
字段写域名
本地测试连接时,优先用 IP 而非 hostname:
mysql -h 192.168.1.100 -P 3306 -u devuser -p
(注意
-P
是大写,小写
-p
是密码)
如果用 GUI 工具(如 DBeaver、TablePlus),确保连接配置里的
Host
填的是服务器真实 IP,不是
localhost
127.0.0.1

远程连 MySQL 看似三步:改 bind、授权限、开防火墙,但每步都有隐性依赖。最容易卡住的是

bind-address
没生效(配置文件路径错、多配置文件冲突)、用户 Host 匹配失败(大小写、空格、% 位置)、以及云平台安全组漏配——这三处查一遍,90% 的连接问题就解决了。

相关推荐