密碼正確 mysql無法登陸 red7.3 上安裝mysql5.6后登錄報錯ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passswd :yes)


集群需要mysql存儲元數據,就在前幾天還運行好好的,突然就進不去了......還是太菜,遇到的bug少。

引起這種故障的原因有很多......第一個坑比較多,大部分用戶也就用第一個就可以解決問題,我第一次也踩了第一個坑;這次出現這個問題的時候,發現不管用了,各種百度啊.....最后是發現第三個坑

1.第一個坑:密碼不對--免密模式改密碼;

2第二坑:user表有匿名用戶,把匿名用戶刪除掉即可

3第三坑:localhost不對應

2.第四坑:user表下password_expired對應字段為Y。這個的意思是過期了!!!改密碼什么的不管用啊,需要修改權限。

---------------------------------我是華麗的分割線--------------------------------------

-----------------------第一種坑:改密碼------------------------------

1.mysql安裝完成查看臨時密碼:

[root@localhost mysql]# cat /root/.mysql_secret 
# The random password set for the root user at Thu Sep 13 22:33:41 2018 (local time): uZlyTYGkbiE4zsjA

2.臨時密碼登錄報錯:

[root@localhost mysql]# mysql -umysql -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: YES)

3.停止mysql

systemctl stop mysql

4.編輯/usr/my.cnf文件

vi /etc/my.cnf

在my.cnf文件的[mysqld]添加以下內容,用於免密登錄

skip-grant-tables

4.啟動mysql

systemctl  start mysql

5.無密碼登錄

mysql -u root

6.修改密碼

use mysql ;
update mysql.user set authentication_string=password('123456') where user='xxx' ;
flush  privileges;
quit

7.編輯/usr/my.cnf文件,注釋掉skip-grant-tables。

 

 -----當修改密碼時,發現依舊不好使,這時候就要查看user表,判斷:是第2種坑?第3種坑?還是第4種坑?-------

 

select user,host,password,password_expired from user;

1、如果password字段為空,則有匿名用戶;

2、如果host字段沒有localhost,則localhost不對應;

3、如果root@localhost對應的password_expired有Y字樣,則密碼過期了!!需要改權限!! 

 

 

下面的這三篇博客分別講述了三種情況

-------------------------------------博客1:有匿名用戶,單純改密碼不行----------------------------------------

https://www.cnblogs.com/linuxnote/p/3780244.html?utm_source=tuicool&utm_medium=referral

查看user表

復制代碼
mysql> use mysql;

mysql> SELECT User, Host, Password FROM mysql.user; +------+------------------+-------------------------------------------+ | User | Host | Password | +------+------------------+-------------------------------------------+ | root | localhost | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | | root | liao.localdomain | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | | root | 127.0.0.1 | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | | GaMe | % | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | | root | % | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | | | localhost | | | | liao.localdomain | | +------+------------------+-------------------------------------------+
復制代碼

 可以看到,我的數據庫中有root用戶,GaMe用戶和匿名用戶,GaMe用戶的主機使用%代表所有主機。最下面的2個是匿名用戶

解決的方法:刪除匿名用戶(僅僅為了安全也有這個必要)

 mysql>use mysql;
 mysql>delete from user where user='';
 mysql>flush privileges; //用來刷新內存,是語句立即生效。

 再次修改密碼即可!

-------------------------------------博客2:localhost不對應----------------------------------

來源:https://www.linuxidc.com/Linux/2015-04/116492.htm

查看一下user表: 

mysql> select user,host from user; 
+———–+———+ 
| user   | host | 
+———–+———+ 
| root  | 127.0.0.1 | 
| night | % | 
+———–+———+

localhost沒有映射到127.0.0.1?試試#mysql -u root -p xxxx -h 127.0.0.1,果然可以登錄。 
沒有給’root’@’localhost’和’root’@’ip’授權。 
grant all privileges on . to ‘root’@’localhost’ identified by ‘mypassword’ with grant option; 
grant all privileges on . to ‘root’@’118.192.91.xxx’ identified by ‘mypassword’ with grant option;

再查詢一下用戶表: 
這里寫圖片描述 
然后#mysql -u root -p xxxx,登錄成功!

-----------------博客3:user表下root用戶的password_expired對應字段為Y------------

來源:http://equalxx.iteye.com/blog/2394709

1.免密登錄

2.查看user表:

mysql> select user,host, password_expired from user;

而且通過查看user表,發現root用戶的password_expired是Y,意思也就是過期了,這並不是上面update語句能改變的

最后解決這個問題是要通過

flush privileges; 
GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY '123456';
flush privileges; 

 然后就可以通過mysql -uroot -p123456順利登錄了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM