? 前言
在开发、测试或部署项目时,我们经常需要从其他电脑访问 MySQL 数据库,比如:
- 前端同事连接你的后端数据库调试接口
- 测试人员在另一台机器运行自动化脚本
- 服务器部署后,本地开发机远程管理数据
- 使用 Navicat、DBeaver 等图形工具连接远程 MySQL
但默认安装的 MySQL 只允许本机访问(localhost),直接连接会报错:
ERROR 1130 (HY000): Host 'xxx' is not allowed to connect to this MySQL server
别慌!本文将手把手教你 4 步配置 MySQL 支持远程访问,并附带安全加固建议,让你既方便又安全!
✅ 第一步:修改 MySQL 配置文件,允许外部连接
默认 MySQL 只监听 127.0.0.1
(本机),我们需要让它监听所有 IP。
? 配置文件路径:
系统 | 配置文件路径 |
---|---|
Windows | D:\phpstudy_pro\Extensions\MySQL*\my.ini |
Linux | /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf |
macOS | /usr/local/mysql/etc/my.cnf |
? 使用 phpStudy、WAMP、XAMPP 等集成环境?配置文件通常在安装目录下的 MySQL/conf/ 或直接搜索 my.ini。
? 修改内容:
找到 bind-address
配置项:
bind-address = 127.0.0.1
? 修改为:
bind-address = 0.0.0.0
✅ 0.0.0.0
表示监听所有网卡/IP。你也可以指定服务器内网 IP,如 192.168.1.100
。
? 重启 MySQL 服务
# Linux
sudo systemctl restart mysql
# Windows(管理员 CMD)
net stop mysql
net start mysql
sudo systemctl restart mysql
# Windows(管理员 CMD)
net stop mysql
net start mysql
⚠️ phpStudy 用户请在界面中“停止 MySQL → 启动 MySQL”。
✅ 第二步:创建或授权远程用户
MySQL 权限系统是 用户名@主机名
双重验证。默认 root@localhost
不允许远程登录。
✅ 推荐方式:创建专用远程用户(安全!)
-- 登录 MySQL(在服务器本机执行)
mysql -u root -p
-- 创建用户(允许从任意 IP 连接)
CREATE USER 'dev_user'@'%' IDENTIFIED BY 'YourStrongPassword123!';
-- 授权数据库操作权限(按需调整)
GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'dev_user'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
mysql -u root -p
-- 创建用户(允许从任意 IP 连接)
CREATE USER 'dev_user'@'%' IDENTIFIED BY 'YourStrongPassword123!';
-- 授权数据库操作权限(按需调整)
GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'dev_user'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
⚠️ 不推荐:开放 root 远程访问(仅测试环境)
-- 允许 root 从任意主机连接(危险!)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_root_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_root_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
?️ 生产环境强烈建议使用独立用户,避免 root 泄露导致删库跑路!
✅ 第三步:开放防火墙端口(3306)
MySQL 默认端口是 3306
,需放行入站连接。
? Windows 防火墙设置:
- 打开“控制面板” → “Windows Defender 防火墙” → “高级设置”
- 点击“入站规则” → “新建规则”
- 选择“端口” → TCP → 特定端口:
3306
- 允许连接 → 下一步 → 命名如 “MySQL Remote” → 完成
? Linux(Ubuntu/CentOS):
# Ubuntu
sudo ufw allow 3306/tcp
# CentOS
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
sudo ufw allow 3306/tcp
# CentOS
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
✅ 第四步:云服务器用户额外配置(阿里云/腾讯云/AWS)
如果你的 MySQL 跑在云服务器上,还需:
- 登录云控制台 → 安全组
- 添加入站规则:协议 TCP,端口 3306,来源 IP 可设为:
0.0.0.0/0
(任意 IP,测试用)192.168.1.0/24
(公司内网段)你的公网IP/32
(仅你个人电脑)
? 第五步:测试远程连接
在其他电脑上执行:
mysql -h [服务器IP] -u [用户名] -p
示例:
mysql -h 192.168.117.150 -u dev_user -p
或使用图形工具:
- Navicat:新建连接 → 填写 IP、端口、用户名、密码
- DBeaver / MySQL Workbench 同理
✅ 成功登录 = 配置完成!
?️ 安全加固建议(必看!)
远程访问虽方便,但也带来安全风险。请务必:
建议项 | 说明 |
---|---|
❌ 不开放 root 远程 | 创建专用用户,权限最小化 |
✅ 限制访问 IP | 使用 'user'@'192.168.1.%' 或固定 IP |
✅ 使用强密码 | 包含大小写、数字、符号,长度 ≥12 |
✅ 启用 SSL 加密 | 防止中间人窃听(进阶) |
✅ 定期审计用户权限 | SELECT host,user FROM mysql.user; |
✅ 使用 SSH 隧道 | 更安全的远程访问方式(推荐生产环境) |
❗ 常见错误排查
1. ERROR 1130: Host 'xxx' is not allowed...
? 原因:用户未授权该主机连接
✅ 解决:执行 GRANT ... TO 'user'@'%'
并 FLUSH PRIVILEGES;
2. ERROR 2003: Can't connect to MySQL server
? 原因:网络不通 / 防火墙拦截 / MySQL 未监听
✅ 解决:
ping 服务器IP
→ 通吗?telnet 服务器IP 3306
→ 能连上吗?- 检查
bind-address
和防火墙
3. 连接超时 / 无响应
? 可能是云服务器安全组未放行,或 MySQL 服务未启动。
? 总结
配置 MySQL 远程访问只需四步:
- 改
bind-address = 0.0.0.0
- 创建或授权远程用户(推荐非 root)
- 开放防火墙 3306 端口
- 云服务器配置安全组
? 小贴士:开发环境可适当宽松,生产环境务必遵循最小权限原则!
相关文章