MySQL8.0 on Windows下重置root密碼的BUG


很多人都知道MySQL忘記root密碼之后可以通過skip-grant-tables來暫時免密登錄MySQL,從而修改root密碼,但是這種方式一方面有安全隱患,另一方面也並不怎么適用於Windows系統,今天在通過此方式修改MySQL8.0 on Windows的root密碼時遇到了這個問題,寫個小隨筆記一下。

參考:

https://dev.mysql.com/doc/refman/8.0/en/resetting-permissions.html

https://bugs.mysql.com/bug.php?id=90554

首先看下修改MySQL密碼的兩種方式:

方法一:

在MySQL的啟動文件中添加skip-grant-tables參數后重啟MySQL,然后免密登錄MySQL后執行:

flush privileges; --必須先執行此命令
ALTER user root@'localhost' identified by 'newpasswd';

然后重啟MySQL即可。

方法二:

創建一個名為root_newpass.txt的文本文件,放入如下內容:

ALTER user root@'localhost' identified by 'newpasswd';

然后使用此文件啟動一次數據庫:

mysqld --defaults-file="C:\\ProgramData\\MySQL\\MySQL Server 8.0\\my.ini" --init-file=root_newpass.txt
# --defaults-file必須寫在--init-file之前

如果是在Linux下則無需添加--defaults-file項。

之后再按正常方式啟動數據庫就可以了。

使用方法一無法在MySQL8.0 on Windows上修改root密碼的問題在哪兒?

在官方文檔關於--skip-grants-tables的描述中5.7和8.0版本里有一句明顯的差異,8.0里多了如下一句:

If the server is started with the --skip-grant-tables option to disable authentication checks, 
the server enables --skip-networking automatically to prevent remote connections.

其意思是當你使用--skip-grant-tables跳過授權檢測啟動MySQL時,MySQL會自動啟用--skip-networking參數,這會阻止遠程訪問。

如果系統是windows那你需要開啟shared-memory/shared-memory-base-name或者enable-named-pipe/socket這兩對參數任意一對才能本地連接到mysql進行密碼重置(關於這倆名字熟悉sqlserver的應該不陌生),但Windows版本的mysql並不會默認設置這些參數,這導致MySQL8.0在Windows上通過--skip-grant-tables重置密碼是一件很麻煩的事,雖然這比5.7更安全。

推薦使用方法二在任意平台上進行root密碼的重置。


免責聲明!

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



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