Access denied for user 'root'@'localhost' (using password: YES)异常处理

知识点:mysql版本5.7及以以上 系统表user中的密码字段是authentication_string,版本5.7以下的密码字段是password

1.场景:

手贱将mysql系统表user中root数据删掉了,导致连接数据库时报异常

Access denied for user 'root'@'localhost' (using password: YES)

所以需要执行插入这条数据才行(注意版本字段稍有差异)

INSERT INTO `mysql`.`user`(`Host`, `User`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`, `password_last_changed`, `password_lifetime`, `account_locked`) VALUES ('localhost', 'root', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', '*A20C82263F8B1B6AC4CEC54F4B6ECF4981AD6251', 'N', '2019-08-15 15:07:31', NULL, 'N');

插入之后仍然报上述错误,或者因为各种原因报了以上错误,都可试一下修改密码,基本上都会解决

2.修改mysql密码

正常登陆修改密码,就不说了,上述情况下肯定是登陆不进去的,那么此时该如何修改呢

①首先拿到操作系统的root权限,然后kill掉Mysql服务或者手动stop掉,这里我推荐使用手动stop;

 #service mysql stop

②然后执行,在后台模式开启

 # mysqld_safe --skip-grant-tables &

&,表示在后台运行,下图表示后台运行模式


③重新打开一个窗口,以下面免密方式进入数据库,输入mysql可直接进入

 # mysql
 mysql> use mysql;
 mysql> UPDATE user SET password=password("test123") WHERE user='root';   
 mysql> flush privileges;
 mysql> exit;   

注意:如果Mysql的版本是5.7及以上的话update语句如下:

 # mysql
 mysql> use mysql;
 mysql> update user set authentication_string=passworD("test") where user='root';  
 mysql> flush privileges;
 mysql> exit;   

④将后台模式关掉,重启mysql,将进程kill掉,然后重启

Access denied for user 'root'@'localhost' (using password: YES)异常处理_第1张图片

然后用密码登录就可以了

3.远程登录设置

从系统表user中可以看出,root用户的权限只能是本地连接,那么只需将Host改掉‘%’即可(代表任意客户端都可登录),也可改为ip,也可改为主机名

①授权法

//授权所有root客户端都可用该密码登录
mysql> grant all privileges  on *.* to root@'%' identified by "password";
//刷新系统表,必须执行
mysql> flush privileges;

修改后,系统表变为下图

Access denied for user 'root'@'localhost' (using password: YES)异常处理_第2张图片Access denied for user 'root'@'localhost' (using password: YES)异常处理_第3张图片

这样机器就可以以用户名root密码root远程访问该机器上的MySql.

②改表法:update user set host = '%' where user = 'root';

ps:如果上述方法仍然远程连接不上,查看下服务器3306端口是否开启

4.ssh通道登录

上述开启远程登录的方式,可在测试开发时直接使用,生产环境不允许远程直接连接时,是通过ssh通道登录的

原理:通过ssh连接上服务器,然后再服务器上登录mysql(相当于本地登录了)

Access denied for user 'root'@'localhost' (using password: YES)异常处理_第4张图片Access denied for user 'root'@'localhost' (using password: YES)异常处理_第5张图片

你可能感兴趣的:(Linux,mysql)