Win下Mysql根治ERROR 1045 (28000): Access denied for user的方法(絕對有效)

針對ERROR 1045 (28000): Access denied for user這個錯誤,網上大部分的辦法是這樣的:

1.停止Mysql服務

2.用mysqld -nt --skip-grant-tables方式啓動(或者把my.ini里加一行-skip-grant-tables)

3.mysql -uroot直接進去

4.update user set password = password('newpass') where user = 'root';

5.結束mysqld -nt進程(或者去掉my.ini裏的-skip-grant-tables)

6.啓動Mysql服務

 

但是,這樣做完之後,當你重啓電腦後進入mysql卻發現又出現ERROR 1045 (28000)了,用新修改的密碼也進不了,這是爲什麼呢?

其實很簡單,這是是一個數據路徑的問題。

在Win平臺下,Mysql的程序目錄和數據目錄默認是分開的,比如Mysql安裝在 X:\Programs Files\Mysql 下,那麼它的數據則存放在 X:\Programs Data\Mysql\Data 下,並且my.ini裏的datadir默認也是 X:\Programs Data\Mysql\Data 這樣一來用-skip-grant-tables強制修改密碼就有問題了,因爲用 -skip-grant-tables 修改後的用戶數據被放在了 X:\Programs Files\Mysql\Data 下面

 

以Mysql5.6爲例,比如程序安裝在F:\Programs Files\Mysql\Mysql Server 5.6\下,數據文件存放在F:\Programs Data\Mysql\Mysql Server 5.6\下,正常情況下,數據的修改只會影響F:\Programs Data\Mysql\Mysql Server 5.6\Data裏的文件,但是如果你用 -skip-grant-tables 修改了用戶表user的話,修改後的數據則放在了 F:\Programs Files\Mysql\Mysql Server 5.6\Data 裏面(比如新修改的root密碼),而F:\Programs Data\Mysql\Mysql Server 5.6\Data 裏的用戶信息根本沒變,這樣你下次用新修改的密碼登錄的時候自然還會出錯,因此在update user set password = password('newpass') where user = 'root';之後,一定要把F:\Programs Files\Mysql\Mysql Server 5.6\Data\Mysql,F:\Programs Files\Mysql\Mysql Server 5.6\Data\performance_schema 這兩個數據庫文件夾 覆蓋到 F:\Programs Data\Mysql\Mysql Server 5.6\Data 裏面去,然後再啓動mysql,問題就解決了~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章