MySQL 8.x 修改root用户密码/修改密码/重置密码/忘记密码(为了避免掉坑,值得收藏)
操作系統(tǒng):CentOS Linux release 8.2.2004 (Core)
MySQL版本:mysql Ver 8.0.26 for Linux on x86_64 (Source distribution)
忘記 root 用戶的密碼,然后我以無需“權(quán)限驗證”的方式啟動 MySQL 服務(wù)器(具體方法參考這里),接著我登錄 MySQL,然后輸入下面的命令修改 root 用戶的密碼:
update user set authentication_string=password('123456') where user='root'; # 或者 set password for 'root'@'localhost' = password('123456');結(jié)果報錯:
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 '('123456') WHERE User='root'' at line 1報錯原因:MySQL 8.0 不支持 password() 函數(shù)。
在 MySQL 8.0 中正確的修改用戶密碼的命令如下:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';或者
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';結(jié)果還是報錯:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement原因:你沒有刷新權(quán)限,你需要執(zhí)行 flush privileges 就不會報錯了。
接著繼續(xù)執(zhí)行修改密碼的命令,又報錯了:
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'解決辦法:
從 mysql.user 表中刪除用戶 root@localhost,然后刷新權(quán)限 FLUSH PRIVILEGES,再新建用戶 root@localhost 就不會有這個問題了。
刪除用戶、創(chuàng)建用戶的命令:
delete from user where user='root' and host='localhost'; # 刷新權(quán)限 flush privileges; # 創(chuàng)建用戶 create user 'root'@'localhost' identified by '123456'; # 給用戶授權(quán) GRANT ALL PRIVILEGES ON *.* TO 'root'@localhost WITH GRANT OPTION;你也可以使用 drop 語句刪除用戶,該語句有個好處,會自動刷新權(quán)限,所以刪除后,可以直接創(chuàng)建用戶。
drop user 'root'@'localhost';糾正下:
修改用戶密碼,沒有必要先刪除用戶再創(chuàng)建用戶。其實在 MySQL 8.x 中無法直接修改用戶的密碼是因為字段 authentication_string 有值,所以無法直接修改,我們可以先將要修改密碼的用戶的字段 authentication_string 置為空,再設(shè)置新的密碼,沒有必要刪除該用戶。
總結(jié)
以上是生活随笔為你收集整理的MySQL 8.x 修改root用户密码/修改密码/重置密码/忘记密码(为了避免掉坑,值得收藏)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工伤备案是什么意思,是不是已经申报了工伤
- 下一篇: 曾经沧海难为水,除却巫山不是云解析(云解