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