MySQL 开启 root 远程登录完整教程
wxk1991 Lv3

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
2
3
4
5
GRANT ALL PRIVILEGES
ON *.*
TO 'root'@'%'
IDENTIFIED BY 'root'
WITH GRANT OPTION;

配置详解


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
2
CREATE USER 'admin'@'固定IP'
IDENTIFIED BY '复杂密码';

比:

1
root@%

安全很多。


十一、查看所有用户

执行:

1
SELECT user, host FROM mysql.user;

十二、删除远程 root

如果不再需要:

执行:

1
DROP USER 'root'@'%';

然后:

1
FLUSH PRIVILEGES;

十三、修改 root 密码

执行:

1
2
ALTER USER 'root'@'%'
IDENTIFIED BY 'new_password';

十四、常见问题

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
尽量使用普通业务账号