最近在學(xué)習(xí)后臺項目敛纲。項目使用SpringBoot搭建耘眨,然后通過application.properties配置MySQL晌纫。在配置過程中税迷,意識到數(shù)據(jù)庫root密碼過于簡單,覺得有必要更改一遍锹漱,于是便找了一些攻略箭养。參考這篇文章:Reset MySQL password。但這文章里面說的有些已經(jīng)過時哥牍,要做部分的更改毕泌。
執(zhí)行命令
#關(guān)掉mysql服務(wù)
mysql.server stop
#安全打開mysql服務(wù),跳過權(quán)限認證
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
本人當(dāng)前版本為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服務(wù)自啟動愿题。
當(dāng)你執(zhí)行
mysql.server stop
命令停止mysql 服務(wù)時,請務(wù)必檢查一下是否真正關(guān)閉了:
mysql.server status
如果關(guān)閉了的話會提示 ERROR! MySQL is not running.
如果顯示你的mysql 服務(wù)還在跑的話蛙奖,那就要檢查一下自啟動項了潘酗。
#列出所有自啟動服務(wù)
launchctl list
or
#查找mysql相關(guān)自啟動項
launch list | grep mysql
如果你發(fā)現(xiàn) homebrew.mxcl.mysql,則你需要把它移除雁仲,否則你每次關(guān)閉server都會自己啟動仔夺。
#移除mysql自啟動項
launchctl remove homebrew.mxcl.mysql
網(wǎng)上有說使用launchctl unload命令
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
但在我這里雖然關(guān)閉了mysql服務(wù),但是后續(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的值時政钟,是先加密再匹配路克,這樣必然導(dǎo)致匹配不上樟结,然后你上次的舊密碼也登陸不上去了。我在這里踩了一下午的坑精算。
配上查看user表的sql語句
#列表顯示當(dāng)前所有數(shù)據(jù)庫瓢宦,其中包括了mysql。
show databases;
#進入mysql數(shù)據(jù)庫
use mysql;
#查看當(dāng)前數(shù)據(jù)庫的表灰羽,你會發(fā)現(xiàn)有個user的表驮履。
show tables;
#查看user表的內(nèi)容,你便會發(fā)現(xiàn)在User列找到root,密碼存儲在authentication_string列中廉嚼。
select * from user;
好了玫镐,接著再擼碼吧。