萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL Root 密碼重置全攻略:兩種官方方法與實戰避坑指南

遺忘 MySQL root 密碼是經典運維場景。本文提供兩種官方重置方案:替換 mysql 系統表法(簡單粗暴)與 skip-grant-tables 法(標準流程),並說明權限刷新、安全加固與常見失誤避坑。

方法一:替換 mysql 系統資料庫(最快、最暴力)

原理:用全新安裝的 mysql 資料庫目錄覆蓋舊目錄,重置為出廠預設(root 無密碼)。

  1. 下載對應版本 MySQL 原始碼包或安裝包
  2. 停止服務:service mysqld stop
  3. 備份舊目錄:mv /var/lib/mysql/mysql /var/lib/mysql/mysql_old
  4. 複製全新 mysql 目錄:cp -r /path/to/mysql-src/data/mysql /var/lib/mysql/
  5. 修正權限:chown -R mysql:mysql /var/lib/mysql/mysql
  6. 啟動服務:service mysqld start
  7. 無密碼登入:mysql -u root
  8. 立即設定強密碼並清理匿名用戶:
    UPDATE mysql.user SET authentication_string=PASSWORD('StrongPass!') WHERE User='root';
    DELETE FROM mysql.user WHERE User='';
    FLUSH PRIVILEGES;
  9. 檢查 mysql_old 中的業務授權資料,按需遷移

風險:所有歷史授權、存儲程序、事件、視圖定義(儲存在 mysql.db/proc/event 等表)將遺失,需手動遷移。

方法二:--skip-grant-tables 模式(標準、保留授權)

原理:跳過權限檢查啟動,免密登入修改 mysql.user 表,再重新載入權限。

步驟

  1. 停止 MySQL:
    kill `cat /var/lib/mysql/hostname.pid`   # 非 kill -9
    # 或
    killall -TERM mysqld
  2. 跳過授權表啟動:
    mysqld_safe --skip-grant-tables --skip-networking &  # --skip-networking 防止外部連入
    # 或
    /usr/local/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking &
  3. 免密登入修改密碼:
    mysql -u root mysql
    UPDATE user SET authentication_string=PASSWORD('NewStrongPass!') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;
  4. 重新正常啟動:
    mysqladmin -u root -p shutdown  # 用新密碼關閉
    service mysqld start              # 正常模式啟動
  5. 驗證新密碼:mysql -u root -p'NewStrongPass!'

關鍵細節與避坑

環節易犯錯誤正確做法
停止服務用 kill -9 強殺TERM 信號讓 InnoDB 做 checkpoint
啟動 skip-grant-tables忘記 --skip-networking必須加上,防止無密碼被遠端連入
修改密碼用 password() 函數(5.7+ 棄用)MySQL 5.7+ 用 authentication_string 欄位;8.0 用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'pass';
刷新權限只改表不 FLUSH PRIVILEGES必須執行 FLUSH PRIVILEGES 或 mysqladmin flush-privileges
重啟驗證直接用舊密碼測試必須用新密碼登入確認

MySQL 8.0+ 專用簡化語法

-- 在 skip-grant-tables 模式下
FLUSH PRIVILEGES;  -- 8.0 必須先執行,才能 ALTER USER
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass!';

事後安全加固

  1. 執行 mysql_secure_installation:移除匿名用戶、禁止遠端 root、移除 test DB、載入權限
  2. 建立專用應用帳號,最小權限原則
  3. 配置密碼策略:validate_password 插件強制複雜度
  4. 記錄密碼至密碼管理器(Bitwarden/1Password/Keepass),杜絕明文留存

Root 密碼重置不是目的,事後權限收斂與審計才是核心。建議將重置流程文件化、腳本化,納入災難恢復演練(DR Drill)定期演練,確保關鍵時刻「人人可操作、步步有記錄、分鐘級恢復」。

copyright © 萬盛學電腦網 all rights reserved