远程连接mysql数据库
前言 : 由于使用之前的React项目中的mysql 模块并未完全支持 MySQL8 的 “caching_sha2_password” 加密方式,导致无法连接数据库, 而本地的数据库是mysql8以上的版本, 但有存着其他项目的数据, 若修改mysql的加密方式可能导致其他项目无法连接数据库。恰巧VMware虚拟机中的centos7 minimal之前装过mysql5.7,因此想通过远程连接虚拟机中的数据库来解决这个问题。
以下操作的环境 : vmware虚拟机中的操作系统为
centos7 minimal
,数据库版本为mysql 5.7.35
,下面将记录我操作的有关过程。
在Linux端设置mysql数据库
-
首先进入vmware虚拟机中的centos7 minimal系统
- mysql数据库默认只能进行本地连接
-
进入mysql数据库
mysql -u root -p
- 输入数据库密码进入即可
-
打开数据库远程连接的权限(一般远程连接是默认关闭的), 使用命令进行设置
-
grant all privileges on xxx.* to xxx@'%' identified by 'xxxx';
-
比如 : 用户名为
test
, 数据库密码为Mysql@2023
(密码过于简单会提示不通过)grant all privileges on test.* to test@'%' identified by 'Mysql@2023';
-
再比如: 用户名为
root
, 数据库密码为Mysql@2023
grant all privileges on root.* to root@'%' identified by 'Mysql@2023';
-
刷新一下权限 :
flush privileges;
-
-
继续使用命令
use mysql
select host, user from user;
-
可以看到test账户名中对应的host为%的通配符
-
host列指定了允许用户登录所使用的IP,比如user=root Host=localhost (127.0.0.1)。这里的意思就是说root用户只能通过本地的客户端去访问。而 %是个 通配符 ,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果 Host=% ,表示所有IP都有连接权限。这样就可以远程连接数据库。
-
输入
exit
退出mysql
注意: 需要开放3306端口防火墙才能远程连接数据库
- 在Linux命令行中输入
firewall-cmd --permanent --add-port=3306/tcp
,然后再输入命令reboot
重启Linux就可以了- 或者直接关闭Linux的防火墙
firewall-cmd --state
systemctl stop firewalld.service
systemctl disable firewalld.service
- 查看Linux的主机IP地址 使用
ifconfig
或者ip addr
在Windows端连接数据库
-
在Windows端使用Navicat连接Linux的数据库
-
新建连接
-
输入数据库所在的主机地址、用户名和密码
-
测试连接,确认能连接通
- 确定保存
- 远程连接成功!
新建数据库试试
哦豁!又有问题了,出现这个错误的原因是因为没有权限使用数据库
-
使用下面的命令进行授权
-
grant all on *.* to 'xxx'@'%' identified by 'xxxx' with grant option;
-
比如 :
grant all on *.* to 'root'@'%' identified by 'Mysql@2023' with grant option;
-
再比如 :
grant all on *.* to 'test'@'%' identified by 'Mysql@2023' with grant option;
-
-
-
对比之前的命令
grant all privileges on *.* to test@'%' identified by 'Mysql@2023'
漏了后面的授予权限with grant option
-
因此打开数据库远程连接的权限直接使用
grant all on *.* to 'root'@'%' identified by 'password' with grant option;
命令进行授权即可 -
刷新一下权限 :
flush privileges;
再试一下, ok成功创建hkzf
数据库
参考博客:
https://blog.csdn.net/weixin_47316183/article/details/125410216
https://blog.csdn.net/qq_57309855/article/details/127602061
ps: 删除授予的权限 :
revoke all privileges,grant option from '用户名'@'%';
比如 :
revoke all privileges,grant option from 'test'@'%';
或者
revoke all privileges,grant option from 'test';