搞了一天的mysql远程连接, 也算是踩过坑了,这里记录一下

如果你的mysql无法被远程连接,那么请依次检查如下条件:

1. 服务器的防火墙(安全组)放行端口

如果mysql服务在云服务器上运行, 那么请检查云服务器是否将端口3306开放。 如果没有开放请设置为通行状态。。
这里不同的云服务器厂商的截图不同,我这里给出华为云的安全组设置

华为云:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e44f593c14434d7e87359c45016de270.png#pic_center)

2. 启动mysql的远程连接服务

在命令台中使用mysql -uroot 进入你的mysql数据库。

1
mysql -uroot 

选择mysql库
1
use mysql

检查user表中的host和User信息。
1
select host,User from user;

如果你的root字段对应的host是localhost,那么代表root账户只能本地登录。
1
2
3
4
5
6
7
8
9
+-----------+------------------+
| host | User |
+-----------+------------------+
| localhost | root |
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+

可以将host字段更改为%表示允许所有ip登录root账号。

1
update user  set host = '%' where user = 'root';   

更改后使用查表命令检查一下

1
select host,User from user;

更改后应该为如下:
1
2
3
4
5
6
7
8
9
+-----------+------------------+
| host | User |
+-----------+------------------+
| % | root |
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+

3. 更改密码验证方式

如果mysql版本是5.7或更低,无需考虑本条。

在mysql版本8.0版本后, 使用sha2方式来验证密码。 就导致我们不能正确连接。需要设置为允许密码连接。

1
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';