MySQL 开启 root 远程登录完整教程
MySQL 开启 root 远程登录完整教程
很多人在安装 MySQL 后:
会发现:
1 | root 无法远程连接 |
例如:
- Navicat 无法登录
- DBeaver 无法连接
- Java 程序报错
- Access denied
原因通常:
1 | MySQL 默认禁止 root 远程访问 |
本篇文章教你:
- 如何开启 root 远程登录
- 开启 3306 远程访问
- 修改 bind-address
- 配置防火墙
- Navicat 连接 MySQL
一、进入 MySQL
使用 root 登录:
1 | mysql -u root -p |
输入:
1 | root 密码 |
进入数据库。
二、开启 root 远程访问
执行:
1 | GRANT ALL PRIVILEGES |
配置详解
root@%
1 | 允许任意 IP 使用 root 登录 |
其中:
| 配置 | 含义 |
|---|---|
| root | 用户名 |
| % | 任意 IP |
ALL PRIVILEGES
表示:
1 | 授予全部权限 |
包括:
- 查询
- 删除
- 修改
- 创建数据库
- 删除数据库
WITH GRANT OPTION
表示:
1 | 允许 root 再给别人授权 |
三、刷新权限
执行:
1 | FLUSH PRIVILEGES; |
作用:
1 | 立即生效 |
四、修改 bind-address
很多时候:
1 | 即使授权成功 |
仍然:
1 | 无法远程连接 |
原因:
1 | MySQL 只监听本地 |
编辑配置文件
Ubuntu:
1 | sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf |
CentOS:
1 | sudo vi /etc/my.cnf |
修改配置
找到:
1 | [mysqld] |
确保:
1 | bind-address = 0.0.0.0 |
什么是 0.0.0.0?
表示:
1 | 监听所有 IP |
否则:
1 | 只能本地访问 |
五、重启 MySQL
执行:
1 | sudo systemctl restart mysql |
六、开放 3306 防火墙
Ubuntu(ufw)
执行:
1 | sudo ufw allow 3306/tcp |
CentOS(firewalld)
执行:
1 | sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp |
然后:
1 | sudo firewall-cmd --reload |
七、云服务器额外注意
如果你使用:
- AWS
- 阿里云
- 腾讯云
- Oracle Cloud
还需要:
1 | 开放安全组 3306 |
否则:
1 | 外部仍然无法连接 |
八、检查 MySQL 是否监听成功
执行:
1 | sudo ss -tunlp | grep 3306 |
如果看到:
1 | 0.0.0.0:3306 |
说明:
1 | 远程监听成功 |
九、Navicat 连接配置
例如:
| 配置 | 内容 |
|---|---|
| 主机 | 服务器公网 IP |
| 端口 | 3306 |
| 用户名 | root |
| 密码 | root 密码 |
十、为什么不推荐 root 远程登录?
因为:
1 | 风险非常高 |
root:
1 | 拥有最高权限 |
如果被爆破:
1 | 整个数据库都会失控 |
推荐生产环境方案
生产环境建议:
1 | 不要开放 root |
推荐:
- 单独业务账号
- 限制 IP
- 使用强密码
- 使用 VPN
- 开启 Fail2ban
推荐安全方案
例如:
1 | CREATE USER 'admin'@'固定IP' |
比:
1 | root@% |
安全很多。
十一、查看所有用户
执行:
1 | SELECT user, host FROM mysql.user; |
十二、删除远程 root
如果不再需要:
执行:
1 | DROP USER 'root'@'%'; |
然后:
1 | FLUSH PRIVILEGES; |
十三、修改 root 密码
执行:
1 | ALTER USER 'root'@'%' |
十四、常见问题
1. Access denied
原因:
- 密码错误
- 权限未刷新
- Host 不匹配
2. Connection timed out
通常:
1 | 防火墙或安全组问题 |
3. Navicat 无法连接
检查:
- bind-address
- 3306
- 防火墙
- 安全组
4. ERROR 1819
说明:
1 | 密码强度不够 |
需要:
1 | 更复杂密码 |
十五、推荐生产环境配置
推荐:
| 项目 | 推荐 |
|---|---|
| root 远程 | 不推荐 |
| 普通业务账号 | 推荐 |
| 安全组 IP 限制 | 推荐 |
| 3306 公网暴露 | 谨慎 |
| VPN | 推荐 |
总结
MySQL 开启 root 远程:
核心步骤:
| 步骤 | 内容 |
|---|---|
| 1 | GRANT 权限 |
| 2 | FLUSH PRIVILEGES |
| 3 | 修改 bind-address |
| 4 | 重启 MySQL |
| 5 | 开放 3306 |
| 6 | 配置安全组 |
重点:
1 | bind-address + 防火墙 + 安全组 |
缺一不可。
虽然:
1 | root 远程登录很方便 |
但:
1 | 生产环境风险非常高 |
建议:
1 | 尽量使用普通业务账号 |