解决数据库User表误删后导致的系列问题
- navicate连接到mysql
今天在做JavaEE作业,创建表的时候,不小心误删了mysql里面的user表,导致出现了navicate无法连接到MySQL的问题,错误提示如下:“Host ‘localhost’ is not allowed to connect to this MySQL server”
在网上找到了两种解决方法,如下:
①尝试解决方法一:
1:停止mysql服务
2:进入C:\ProgramData\MySQL\MySQL Server 8.0 找到该文件下的my.ini更改配置,如果没有访问权限,就右击My.ini找到属性-安全-在当前用户下编辑-设置读写权限即可;
3.找到以下片段 [mysqld]
4:另起一行加入并保存 skip-grant-tables
5:启动mysql服务
6:登录mysql(无用户名和密码)
尝试到第6步,在MySQL 8.0 Command Line Client无法登录,出现闪退现象
②尝试解决方法二:重装Mysql和navicate
1.到官网下载Mysql并安装
2.到官网下载navicate并注册重新手动激活
3.连接时仍然出现问题:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES);拒绝访问root用户
在此新问题上,寻找解决方法如下:
1.进入mysql数据库:
mysql> use mysql;
Database changed
2.给root用户设置新密码:
mysql> update user set password=password(“新密码”) where user=“root”;
Query OK, 1 rows affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
3.刷新数据库
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
按照以上操作,在navicate测试连接的时候显示连接成功,但是事实上正式连接又会出现新的错误:2059 - authentication plugin ‘caching_sha2_password’ -navicat连接异常
这个错误出现的原因是在mysql8之前的版本中加密规则为mysql_native_password,而在mysql8以后的加密规则为
caching_sha2_password。
因此,尝试解决这个错误的方法如下两种:
(1)升级navicate的驱动,但是升级navicate后会导致原来的注册激活码不可用,还得重装navicate
(2)应用加密规则mysql_native_password修改mysql密码.
第一次,我尝试了以下命令
use mysql; ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’;
但是由于新版的mysql数据库下的user表中已经没有Password字段了而是将加密后的用户密码存储于authentication_string字段,所以上面的命令也出错了应该更改为update mysql.user set authentication_string=password(‘1234’) where user=‘root’ and Host = ‘localhost’;
但是很奇怪,这句命令执行完也无法连接
最后找到一个方法输入如下命令,然后打开服务,成功连接navicate
- mysql数据的迁移
navicate重新连接上mysql之后,相信大家最关心的应该就是之前数据库里面的数据是否还能继续使用的问题了。因此,在重装MySQL之前,大家一定记得把原先的数据文件复制保存下来,这样重装以后就可以导入继续使用了。注意,拷贝的时候一定要记得把data里面的数据库文件夹和应将data目录下的 ibdata1 文件一并复制过去,并且删除ib_logfile1 ib_logfile1 文件,否则是无法完整迁移使用的。
- 最后!!!追溯问题的原因
- 为什么删掉mysql.user会出现无法连接的错误?
- 答:因为mysql里面的user表设置了登录到mysql数据库用户及其拥有的权限,因此没有了这张表,主机就不被允许连接到MySQL的服务器。所以大家以后删表一定要三思三思再三思!!!