前置说明
系统:Ubuntu 2204
MySQL 版本:8.0
登录 MySQL 服务器:
mysql -u root -p
查看 root 用户的访问权限:
SELECT user, host FROM mysql.user WHERE user = 'root';
如果查询结果如下,host 列中只有 localhost,说明 root 只能从本地访问,不能远程访问
+------+-----------+
| user | host |
+------+-----------+
| root | localhost |
+------+-----------+
解决方法如下:
修改 MySQL 配置文件
打开 MySQL 配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到以下行
bind-address = 127.0.0.1
# 这说明MySQL只允许内部访问
修改为
bind-address = 0.0.0.0
如果没有
bind-address字段,则在[mysqld]下自行添加
保存文件并重启 MySQL 服务
sudo systemctl restart mysql
授予权限
创建用户
CREATE USER 'root'@'%' IDENTIFIED BY '{your_password}';
授予权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
刷新权限
FLUSH PRIVILEGES;
验证修改
SELECT user, host FROM mysql.user WHERE user = 'root';
查询结果如下:
mysql> SELECT user, host FROM mysql.user WHERE user = 'root';
+------+-----------+
| user | host |
+------+-----------+
| root | % |
| root | localhost |
+------+-----------+
2 rows in set (0.00 sec)
其他可能
也有可能是防火墙直接阻止外部访问 MySQL 的端口,但是没遇到这个情况所以就不写了