3.5 再执行更新操作
update user set plugin="mysql_native_password";
3.6刷新系统权限相关表
flush privileges;
如果报错提示其他表有3.4的报错,就对其执行一下3.4再执行3.6。
3.7退出mysql
quit
4.将第一步文件中的skip-grant-tables注释掉,并重启MySQL服务器
sudo systemctl restart mysql
5、再次重新访问mysql,发现依旧无法进入
这是因为user表中是空的,并没有写入root信息和验证。
6、解决user表为空的问题【3,4】
6.1修改mysqld.cnf文件
在配置文件中添加或修改下面两项: (文件中没有sql_mode项添加后不知sql_mode是否起作用,反正需要安全模式进入mysql)
sql_mode=NO_ENGINE_SUBSTITUTION skip-grant-tables
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
需要把STRICT_TRANS_TABLES去掉,即改为:sql_mode=NO_ENGINE_SUBSTITUTION
注:简单来说STRICT_TRANS_TABLES这个是启用严格模式,进入安全模式后如果启用了严格模式向表插入数据插入不了的;
6.2重启mysql服务,并使用root 空密码连接数据库
6.3向user表插入root用户
insert into mysql.user(Host,User,authentication_string) values("%","root",password("123456"));
6.4修改root用户权限,并更新权限,然后退出
update mysql.user set `Select_priv` = 'Y', `Insert_priv` = 'Y', `Update_priv` = 'Y', `Delete_priv` = 'Y', `Create_priv` = 'Y', `Drop_priv` = 'Y', `Reload_priv` = 'Y', `Shutdown_priv` = 'Y', `Process_priv` = 'Y', `File_priv` = 'Y', `Grant_priv` = 'Y', `References_priv` = 'Y', `Index_priv` = 'Y', `Alter_priv` = 'Y', `Show_db_priv` = 'Y', `Super_priv` = 'Y', `Create_tmp_table_priv` = 'Y', `Lock_tables_priv` = 'Y', `Execute_priv` = 'Y', `Repl_slave_priv` = 'Y', `Repl_client_priv` = 'Y', `Create_view_priv` = 'Y', `Show_view_priv` = 'Y', `Create_routine_priv` = 'Y', `Alter_routine_priv` = 'Y', `Create_user_priv` = 'Y', `Event_priv` = 'Y', `Trigger_priv` = 'Y', `Create_tablespace_priv` = 'Y' where user='root';
flush privileges;
7、将配置文件修改恢复
注释掉或改正6.1中添加修改的部分。
8、重启mysql服务,能够正常访问了
四、参考
1、https://blog.csdn.net/m0_37657841/article/details/90046238
2、https://blog.csdn.net/tgdzsjh/article/details/105411581
3、https://www.qycn.com/xzx/article/7071.html
4、https://blog.csdn.net/u012232730/article/details/96878696