解決mysql報錯You must reset your password using ALTER USER statement before executing this statement問題
mysql報錯You must reset your password using ALTER USER statement before executing this statement
在 linux 中安裝好 MySQL 并完成初始化配置后,使用默認(rèn)生成的 root 用戶密碼登錄 MySQL 時,可能會出現(xiàn)無法執(zhí)行任何語句的情況
提示:
「You must reset your password using ALTER USER statement before executing this statement」
這是因為 MySQL 5.7 版本后,用戶表的密碼字段由 password 改為了 authentication_string,同時增加了一個 password_expired 字段來標(biāo)識密碼是否過期。
對于 root 用戶密碼過期的情況
通過以下步驟來修改root用戶的密碼
1. 停止所有的 MySQL 進(jìn)程。使用命令 `service mysql stop` 或 `killall mysql`
2. 使用無驗證模式啟動 MySQL。執(zhí)行命令 `mysqld_safe --skip-grant-tables`
3. 使用 MySQL 客戶端登錄無需密碼。此時可以執(zhí)行任何語句。
4. 檢查用戶表,使用 `select * from mysql.user;`來查看用戶詳情。
5. 修改 root 用戶的密碼到期標(biāo)識和密碼。
6. 使用語句:
`update mysql.user set authentication_string=password('yourpassword'), password_expired='N' where user='root';`
執(zhí)行 `flush privileges;`刷新 privileges 表。
查看結(jié)果
select authentication_string,password_expired from user where user='root';
8. 重新使用正常模式啟動 MySQL 服務(wù)。執(zhí)行 `service mysql start`
9. 使用新設(shè)置的 root 密碼登錄 MySQL 客戶端進(jìn)行操作。
以上步驟可以很方便地解決 MySQL 中 root 密碼過期無法登錄的問題。
重置密碼后需要更新整個項目中的連接配置,以確保正常訪問數(shù)據(jù)庫。
也可以調(diào)整my.cnf
#設(shè)置密碼過期時間為120天,設(shè)為0表示不過期 #default_password_lifetime = 120 default_password_lifetime = 0 #修改密碼強度策略,0為低策略 #validate_password_policy=0 #修改密碼長度 #validate_password_length=5 #跳過密碼校驗,無密碼登錄 #skip-grant-tables
其他報錯處理:
ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
這個錯誤表示MySQL的系統(tǒng)權(quán)限表mysql.user結(jié)構(gòu)與MySQL服務(wù)器預(yù)期的不匹配,可能是由于不兼容的升級或錯誤的操作導(dǎo)致該系統(tǒng)表被破壞。
解決方案有以下幾種
1.嘗試用mysqld自帶的修復(fù)模式先修復(fù)表結(jié)構(gòu):
mysqld --defaults-file=/etc/my.cnf --skip-grant-tables --user=mysql --skip-networking --safe-mode &
進(jìn)入安全模式后,執(zhí)行:
mysql> USE mysql; mysql> REPAIR TABLE user;
如果能順利修復(fù),則重啟正常模式的mysqld服務(wù)器并登錄檢查。
2.如果上述修復(fù)沒有效果
可以嘗試重建mysql.user表:
mysqldump --add-drop-table --no-data mysql user > user.sql
退出,刪除mysql.user表:
DROP TABLE mysql.user;
然后重建:
SOURCE user.sql;
3.如果以上兩種方式仍然無法修復(fù)
則可以嘗試重新初始化MySQL數(shù)據(jù)目錄:
mysqld --defaults-file=/etc/my.cnf --initialize-insecure
這將移除所有數(shù)據(jù)重新初始化,之后需要重新導(dǎo)入數(shù)據(jù)。
4.最后的緊急情況下可以選擇完全卸載重裝MySQL服務(wù)器。
在修復(fù)過程中務(wù)必對現(xiàn)有數(shù)據(jù)做好備份。
修復(fù)表結(jié)構(gòu)本質(zhì)上是對表重建,如果有數(shù)據(jù)損壞可能導(dǎo)致部分?jǐn)?shù)據(jù)丟失。
如果不行的話,可以考慮用之前的備份重建。
產(chǎn)生這個錯誤一般是由于MySQL版本升級,權(quán)限表結(jié)構(gòu)發(fā)生變化,手動操作錯誤等導(dǎo)致。
我們需要格外小心謹(jǐn)慎操作系統(tǒng)權(quán)限表。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Windows安裝MySQL8.0時的報錯匯總及解決方案
- 解決Linux安裝mysql報錯:失敗的軟件包是:mysql-community-libs-8.0.37-1.el7.x86_64?GPG
- MySQL報錯ERROR?2002?(HY000):?Canot?connect?to?local?MySQL?server?through?socket
- 解決mysql啟動報錯:The server quit without updating PID file問題
- MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is deprecated錯誤
- MySQL [Warning] TIMESTAMP with implicit DEFAULT value is deprecated(報錯信息解決)
相關(guān)文章
微信昵稱帶符號導(dǎo)致插入MySQL數(shù)據(jù)庫時出錯的解決方案
Mysql的utf8編碼最多3個字節(jié),而Emoji表情或者某些特殊字符是4個字節(jié),所以會導(dǎo)致帶有表情的昵稱插入數(shù)據(jù)庫時出錯,下面給大家分享下解決方案,需要的朋友參考下吧2016-12-12詳解MySQL數(shù)據(jù)庫、表與完整性約束的定義(Create)
這篇文章主要介紹了MySQL數(shù)據(jù)庫、表與完整性約束的定義(Create),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-04-04