关于MySQL的远程连接的一些总结

MySQL是目前非常流行的数据库之一,也是中小企业持久化存储的首选数据库。

本篇介绍如何远程连接 MySQL,以及在不同版本(5.x,8.x)上远程连接方式的不同。

前言

不同于我们日常学习,在实际应用中,MySQL服务都会挂载在某台服务器上。如果MySQL部署在某台云服务器上,这样一来,操纵数据库每次都需要先连接服务器,再进入数据库操作,不是很方便。

于是,学习远程连接 MySQL 的方法是数据库在服务器上时的必修课。

但为了安全考虑,MySQL的远程连接并不是一键容易事,特别是在MySQL8.x版本时,下面会介绍到。

准备工作

在这个阶段,确保你已经进入了你想要远程访问的数据库服务中,通常的界面如下:

image-20210619210426836

放行远程主机访问

通常来说,MySQL只允许用户在本地主机访问。通过查询 user 表,也可以看到允许的主机信息:

select host,user from mysql.user

image-20210619211330751

host 字段下面的 localhost 代表只接受本地主机。

所以,我们的工作就很清晰了,就是修改访问权限信息,使得指定的用户能够接受远程访问。通常来说,我们有两种方式实现这个效果。

第一种:改账号权限(建议)

既然远程主机没有权限连接,我们可以通过 GRANT 语句修改指定用户的权限。

GRANT 语句的语法大致为:GRANT 权限 ON 数据库对象 TO 用户

授予对所有数据库操作的所有权限给任何主机(’%’)访问的 root 用户 ,这样任何连接到该数据库的root用户的能访问所有信息。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION; 

刷新权限:

flush privileges;

再次查询,可以发现会新增一条记录,host 字段下的 % 表示任何主机:

image-20210619215118534

如果只是想授予某个单独的主机访问权限,则 % 可以修改为指定的 IP:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.28.71' IDENTIFIED BY 
'你的密码' WITH GRANT OPTION;

效果类似:

image-20210619215641750

刷新权限:

flush privileges;

第二种:改表法

使用 GRANT 语句的方法是直接添加一条新记录,我个人建议按上面的方式做。

但是,我们同样可以采用直接修改 userroothost 字段内容,直接使用 UPDATE 语句修改表:

UPDATE mysql.user SET host = '%' WHERE user = 'root';

刷新权限:

flush privileges;

效果如图,直接修改 host 字段值,而不是添加。

image-20210619221211627

到这一步,大多数情况下,我们就可以使用数据库工具如:Web SQLyog、Navicat、Dbeaver等等连接上我们的远程数据库了。

MySQL 8.x 的注意点

但请注意,如果你的 MySQL 版本是 8.x的话,由于密码加密方式的不同,连接时可能会出现如下提示:

image-20210620164641501

因此,我们必须 修改加密方式 以实现远程连接,使用 ALTER 语句:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

最后不要忘了刷新权限:

flush privileges;

OK,教程整体到这里就结束了,如果遇到什么问题,欢迎大家在评论区发表看法

参考

mysql开启远程连接