最近在學習后臺項目。項目使用SpringBoot搭建,然后通過application.properties配置MySQL。在配置過程中,意識到數(shù)據(jù)庫root密碼過于簡單,覺得有必要更改一遍,于是便找了一些攻略。參考這篇文章:Reset MySQL password。但這文章里面說的有些已經(jīng)過時,要做部分的更改。
執(zhí)行命令
#關掉mysql服務
mysql.server stop
#安全打開mysql服務,跳過權限認證
mysqld_safe --skip-grant-tables
#進入mysql數(shù)據(jù)庫
mysql -u root
#清楚root密碼
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
#退出mysql數(shù)據(jù)庫
quit;
#重新進入mysql數(shù)據(jù)庫(不用密碼)
mysql -u root
#修改root密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
PS:建議在執(zhí)行以上命令的時候查一下你數(shù)據(jù)庫版本:
mysql --version
本人當前版本為mysql Ver 8.0.16 for osx10.13 on x86_64 (Homebrew)。如果低于版本5的話,建議根據(jù)Reset MySQL password 去處理。因為在高版本的mysql中不知道password()函數(shù),否則會出現(xiàn)以下警告語句
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '("xxxx") WHERE User='root'' at line 1
踩坑一:MySQL服務自啟動。
當你執(zhí)行
mysql.server stop
命令停止mysql 服務時,請務必檢查一下是否真正關閉了:
mysql.server status
如果關閉了的話會提示 ERROR! MySQL is not running.
如果顯示你的mysql 服務還在跑的話,那就要檢查一下自啟動項了。
#列出所有自啟動服務
launchctl list
or
#查找mysql相關自啟動項
launch list | grep mysql
如果你發(fā)現(xiàn) homebrew.mxcl.mysql,則你需要把它移除,否則你每次關閉server都會自己啟動。
#移除mysql自啟動項
launchctl remove homebrew.mxcl.mysql
網(wǎng)上有說使用launchctl unload命令
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
但在我這里雖然關閉了mysql服務,但是后續(xù)執(zhí)行 mysqld_safe --skip-grant-tables 卻出問題了。至于為什么,至今是個懸案。
采坑二:不要使用以下語句
UPDATE mysql.user SET authentication_string='your_password' WHERE User='root';
如果你有幸去查過root的存儲方式你會發(fā)現(xiàn),他存儲在mysql數(shù)據(jù)庫中的user表中,存儲密碼字段authentication_string,存儲值是個加密串。假如你在這里以明文的方式去更新authentication_string的值,由于mysql匹配root的值時,是先加密再匹配,這樣必然導致匹配不上,然后你上次的舊密碼也登陸不上去了。我在這里踩了一下午的坑。
配上查看user表的sql語句
#列表顯示當前所有數(shù)據(jù)庫,其中包括了mysql。
show databases;
#進入mysql數(shù)據(jù)庫
use mysql;
#查看當前數(shù)據(jù)庫的表,你會發(fā)現(xiàn)有個user的表。
show tables;
#查看user表的內(nèi)容,你便會發(fā)現(xiàn)在User列找到root,密碼存儲在authentication_string列中。
select * from user;
好了,接著再擼碼吧。