搞了一天的mysql远程连接, 也算是踩过坑了,这里记录一下
如果你的mysql无法被远程连接,那么请依次检查如下条件:
1. 服务器的防火墙(安全组)放行端口
如果mysql服务在云服务器上运行, 那么请检查云服务器是否将端口3306开放。 如果没有开放请设置为通行状态。。
这里不同的云服务器厂商的截图不同,我这里给出华为云的安全组设置
华为云:
2. 启动mysql的远程连接服务
在命令台中使用mysql -uroot 进入你的mysql数据库。
mysql -uroot
选择mysql库
use mysql
检查user表中的host和User信息。
select host,User from user;
如果你的root字段对应的host是localhost,那么代表root账户只能本地登录。
+-----------+------------------+
| host | User |
+-----------+------------------+
| localhost | root |
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+
可以将host字段更改为%表示允许所有ip登录root账号。
update user set host = '%' where user = 'root';
更改后使用查表命令检查一下
select host,User from user;
更改后应该为如下:
+-----------+------------------+
| host | User |
+-----------+------------------+
| % | root |
| localhost | debian-sys-maint |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+
3. 更改密码验证方式
如果mysql版本是5.7或更低,无需考虑本条。
在mysql版本8.0版本后, 使用sha2方式来验证密码。 就导致我们不能正确连接。需要设置为允许密码连接。
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';