MySQL 免安裝版本(ZIP 包)本質是綠色軟件,數據文件與程序分離。重裝 Windows 後,只需保留原 data 目錄與配置文件,即可快速恢復服務。本文詳述恢復流程及「Access denied for user 'root'」權限錯誤的徹底解決方案。
REM 假設原安裝目錄 D:\mysql-5.7 完好保留
REM 1. 創建啟動腳本 run.bat 放入 bin 目錄
mysqld.exe --defaults-file=../my.ini --console
REM 2. 以管理員身份運行 run.bat,觀察控制台無錯誤即啟動成功
REM 3. 註冊為服務(可選)
mysqld --install MySQL57 --defaults-file="D:\mysql-5.7\my.ini"
net start MySQL57
關鍵點:my.ini 中 basedir/datadir 必須指向當前絕對路徑,若盤符變更需同步修改。
常見於:數據目錄遷移後權限表異常、密碼遺忘、插件不匹配(8.0 caching_sha2_password)。
REM 1. 停止服務/進程
net stop MySQL57
REM 或任務管理器結束 mysqld.exe
REM 2. 跳過權限表啟動
cd D:\mysql-5.7\bin
mysqld.exe --defaults-file=../my.ini --skip-grant-tables --console
REM 3. 新開 CMD 窗口,無密碼登入
mysql -u root
REM 4. 修改密碼並刷新權限(5.7 版本)
USE mysql;
UPDATE user SET authentication_string=PASSWORD('NewPass123!') WHERE User='root';
FLUSH PRIVILEGES;
REM 8.0+ 版本
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
FLUSH PRIVILEGES;
REM 5. 關閉 --skip-grant-tables 進程,正常重啟
net start MySQL57
# 方式一:安全模式(通用)
systemctl stop mysqld
mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root
# 執行上述 UPDATE/ALTER + FLUSH PRIVILEGES
systemctl restart mysqld
# 方式二:利用 Debian 維護帳號(Debian/Ubuntu 專用)
cat /etc/mysql/debian.cnf
# 獲取 [client] 節下的 user/password
mysql -u debian-sys-maint -p'password_from_file'
# 執行修改 root 密碼 SQL
mysql -u root -p'new_password'
| 檢查項 | 命令/方法 | 預期結果 |
|---|---|---|
| 服務啟動狀態 | net start / systemctl status | Running |
| Root 本地登入 | mysql -u root -p | 成功 |
| Root 遠程登入 | mysql -h IP -u root -p | 需授權:GRANT ALL ON *.* TO 'root'@'%' ... |
| 數據完整性 | SELECT COUNT(*) FROM core_table; | 行數一致 |
| 字符集設置 | SHOW VARIABLES LIKE 'character_set%'; | 均為 utf8mb4 |
| 時區設置 | SHOW VARIABLES LIKE 'time_zone'; | SYSTEM 或指定時區 |
data 目錄datamysqldump --all-databases --routines --triggers > full.sql 導出邏輯備份mysql < full.sqlmysql_upgrade -u root -p 修復系統表注意:直接複製舊 data 到新版本會導致系統表結構不匹配,必須走邏輯備份遷移。