1. 程式人生 > >MySQL密碼正確卻無法本地登錄,ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

MySQL密碼正確卻無法本地登錄,ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

oot 問題 進入 quit mysql數據庫 host 對比 strong In

MySQL密碼正確卻無法本地登錄

報錯如下:

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)

測試發現mysql庫中的user表缺少一個root指向host:localhost的數據項,只有一個root指向host:主機名的數據項,故怎麽也無法利用root賬戶登錄MySQL。
總結一點就是root賬戶缺失了訪問localhost主機的賬戶信息,導致無法本地登錄。

解決方法:
首先kill掉MySQL進程然後在啟動mysql的參數中加入跳過密碼問題方式,如下:
vim /etc/my.cnf
並在[mysql]下面加上skip-grant-tables,


這個用於跳過密碼問題,但是這並不能徹底解決。

在本地用mysql命令直接回車可以進入mysql,但是裏面只有test和information_schema數據庫,沒有mysql等數據庫,使用use mysql報如下錯:
mysql> use mysql
ERROR 1044 (42000): Access denied for user "@‘localhost‘ to database ‘mysql‘
意思是說沒有指定user,沒有權限訪問數據庫mysql。
那麽用root登錄呢,輸入正確的密碼報如下錯:
[root@228827 ~]# mysql -uroot -p123456
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
密碼正確的情況下,mysql數據庫已經禁止了root用戶在本地的登錄權限了。
使用root用戶通過主機127.0.0.1登錄就可以正常進入mysql,127.0.0.1和localhost對mysql數據庫來講是不同的主機,

# mysql -uroot -p123456 -h 127.0.0.1
這讓我想起了mysql下的user表。
我們要進mysql看user表,一種方法可以通過上面的命令,如果不行,可以用下面的命令啟動數據庫,缺省密碼進入

步驟:

[root@localhost ~]# mysql -uroot -p12345 -h 127.0.0.1
mysql> use mysql
Database changed
mysql> select user,host,password from user where user=‘root‘;
+------+-----------------------+-------------------------------------------+
| user | host | password |
+------+-----------------------+-------------------------------------------+
| root | % | *00A51F3F48415C7D4E8908980D443C29C69B60C9 |
| root | localhost.localdomain | *00A51F3F48415C7D4E8908980D443C29C69B60C9 |
| root | 127.0.0.1 | *00A51F3F48415C7D4E8908980D443C29C69B60C9 |
| root | ::1 | *00A51F3F48415C7D4E8908980D443C29C69B60C9 |
+------+-----------------------+-------------------------------------------+
4 rows in set (0.02 sec)

mysql> update user set host=‘localhost‘ where user=‘root‘ and host=‘%‘;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)

mysql> quit
Bye
OK,退出mysql,重啟mysql就解決問題了

前後對比一下:
[root@localhost ~]# mysql -uroot -p
mysql> use mysql;
Database changed
mysql> select user,host,password from user where user=‘root‘;
+------+-----------------------+-------------------------------------------+
| user | host | password |
+------+-----------------------+-------------------------------------------+
| root | localhost | *00A51F3F48415C7D4E8908980D443C29C69B60C9 |
| root | localhost.localdomain | *00A51F3F48415C7D4E8908980D443C29C69B60C9 |
| root | 127.0.0.1 | *00A51F3F48415C7D4E8908980D443C29C69B60C9 |
| root | ::1 | *00A51F3F48415C7D4E8908980D443C29C69B60C9 |
+------+-----------------------+-------------------------------------------+
4 rows in set (0.00 sec)

mysql>
OK!

MySQL密碼正確卻無法本地登錄,ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)