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

來源:互聯網
上載者: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,問題就解決了~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.