在MySQL數(shù)據(jù)庫(kù)運(yùn)維過(guò)程中,root賬號(hào)密碼遺忘或誤刪除會(huì)導(dǎo)致管理權(quán)限喪失,需通過(guò)特定流程恢復(fù)訪問(wèn)權(quán)限。本文針對(duì)不同操作系統(tǒng)環(huán)境,提供詳盡的解決方案,操作前請(qǐng)根據(jù)實(shí)際主機(jī)系統(tǒng)及問(wèn)題類(lèi)型選擇對(duì)應(yīng)步驟。

定位并編輯MySQL核心配置文件
Windows環(huán)境下,配置文件my.ini通常位于MySQL安裝目錄,若采用默認(rèn)環(huán)境路徑則為`d:\SOFT_PHP_PACKAGE\mysql\my.ini`。使用記事本打開(kāi)該文件,在`[mysqld]`配置節(jié)點(diǎn)下添加`skip-grant-tables`參數(shù),此參數(shù)用于跳過(guò)權(quán)限表驗(yàn)證,允許無(wú)密碼登錄。Linux環(huán)境下,需通過(guò)SSH連接服務(wù)器,執(zhí)行`mysql --help |grep my.cnf`命令定位配置文件,常見(jiàn)路徑包括`/etc/my.cnf`、`/etc/mysql/my.cnf`等。使用`vi /www/wdlinux/etc/my.cnf`(路徑以實(shí)際輸出為準(zhǔn))打開(kāi)文件,按`i`進(jìn)入編輯模式,在`[mysqld]`節(jié)點(diǎn)下添加`skip-grant-tables`,完成后按`Esc`鍵輸入`:wq`保存退出。
重啟MySQL服務(wù)以應(yīng)用配置變更
Windows系統(tǒng)需通過(guò)“運(yùn)行”對(duì)話(huà)框輸入`services.msc`,打開(kāi)服務(wù)管理器,找到MySQL服務(wù)項(xiàng),右鍵選擇“重啟”使新配置生效。Linux系統(tǒng)則直接執(zhí)行`service mysqld restart`命令,服務(wù)重啟后將進(jìn)入無(wú)權(quán)限驗(yàn)證模式,為后續(xù)操作提供訪問(wèn)條件。
執(zhí)行root賬號(hào)恢復(fù)或密碼重置操作
Windows與Linux系統(tǒng)在服務(wù)重啟后,均可通過(guò)命令行工具進(jìn)行操作。打開(kāi)命令提示符(Windows)或終端(Linux),輸入`mysql`登錄數(shù)據(jù)庫(kù),執(zhí)行`use mysql;`切換至mysql系統(tǒng)數(shù)據(jù)庫(kù)。
若為root賬號(hào)被誤刪場(chǎng)景,需手動(dòng)重建root用戶(hù)并授權(quán)。執(zhí)行以下SQL語(yǔ)句,創(chuàng)建具備完整權(quán)限的root賬號(hào):
```sql
insert into user set Host='localhost',User='root',Password=Password('111111'),select_priv='y', insert_priv='y',update_priv='y',Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',Event_priv='Y',Trigger_priv='Y';
```
(注:復(fù)制語(yǔ)句時(shí)需去除回車(chē)換行符,確保語(yǔ)法正確)
若為root密碼遺忘場(chǎng)景,需根據(jù)MySQL版本執(zhí)行對(duì)應(yīng)密碼更新語(yǔ)句。MySQL 5.1及5.6版本使用:
```sql
update user set Password=Password('111111') where User='root'; flush privileges;
```
MySQL 5.7及以上版本因字段名變更,需執(zhí)行:
```sql
update mysql.user set authentication_string = password('testpassword') where user='root'; flush privileges;
```
(注:`111111`或`testpassword`需替換為自定義新密碼)
還原MySQL配置并重啟服務(wù)
完成賬號(hào)恢復(fù)或密碼重置后,必須移除臨時(shí)配置參數(shù)以恢復(fù)安全策略。Windows環(huán)境下,再次編輯my.ini文件,刪除或注釋`[mysqld]`節(jié)點(diǎn)下的`skip-grant-tables`(可添加`#`前綴),保存后重啟MySQL服務(wù)。Linux環(huán)境下,通過(guò)`vi /www/wdlinux/etc/my.cnf`打開(kāi)配置文件,使用`dd`命令刪除`skip-grant-tables`行(移動(dòng)光標(biāo)至該行連按兩次`dd`),輸入`:wq`保存退出,執(zhí)行`service mysqld restart`重啟服務(wù)。此時(shí)MySQL將恢復(fù)權(quán)限驗(yàn)證機(jī)制,新密碼或重建的root賬號(hào)生效。