萬盛學電腦網

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

MySQL Root 密碼重置總結:三種方案對比與標準化流程

方案對比速覽

方案適用場景風險停機時間推薦指數
複製已知授權表檔案同版本、同架構、有可用備份實例版本不匹配導致啟動失敗、權限表結構差異短 (重啟一次)⭐⭐
--skip-grant-tables (標準)**所有場景通用**、無備份實例短暫無授權狀態 (需 --skip-networking 緩解)短 (重啟兩次)⭐⭐⭐⭐⭐
十六進位編輯 user.MYD極端情況 (無法啟動、無備份)極高:易損壞索引、位移計算錯誤、InnoDB 不適用長⭐

標準化流程:--skip-grant-tables 企業級 SOP

第一階段:安全隔離

# 1. 停止服務 (優雅關閉)
systemctl stop mysqld
# 或
mysqladmin -u root -p shutdown

# 2. 啟動無授權、無網路模式 (僅本地 Unix socket)
mysqld_safe --skip-grant-tables --skip-networking --socket=/var/run/mysqld/mysqld.sock --datadir=/var/lib/mysql &

※ --skip-networking **必加**,防止無授權狀態下被任意連線。

第二階段:重置密碼

# 3. 本地無密碼登入
mysql -u root -S /var/run/mysqld/mysqld.sock mysql

# 4. 更新密碼 (MySQL 5.7+ authentication_string 欄位)
UPDATE user SET authentication_string=PASSWORD('NewStrongPass#2024'), password_expired='N', password_last_changed=NOW() WHERE User='root';
FLUSH PRIVILEGES;

# 5.7 以前版本
UPDATE user SET Password=PASSWORD('NewStrongPass#2024') WHERE User='root';
FLUSH PRIVILEGES;

第三階段:恢復生產狀態

# 5. 關閉無授權實例
mysqladmin -u root -S /var/run/mysqld/mysqld.sock shutdown

# 6. 正常啟動
systemctl start mysqld

# 7. 驗證新密碼
mysql -u root -p'NewStrongPass#2024' -e "SELECT VERSION();"

方案一:複製授權表檔案 (詳細步驟)

  1. 確認源/目標 MySQL **大版本相同** (如均為 5.7.x 或 8.0.x)。
  2. 目標端:systemctl stop mysqld
  3. 備份原授權目錄:mv /var/lib/mysql/mysql /var/lib/mysql/mysql.bak_$(date +%F)
  4. 從源端複製 (scp/rsync) 完整 mysql 目錄 (含 *.frm, *.ibd, *.MYD, *.MYI, *.sdi)。
  5. 修正擁有者權限:chown -R mysql:mysql /var/lib/mysql/mysql && chmod -R 750 /var/lib/mysql/mysql && find /var/lib/mysql/mysql -name "*.ibd" -exec chmod 660 {} \;
  6. 啟動驗證,登入後**立即執行安全收尾**:
USE mysql;
UPDATE user SET authentication_string=PASSWORD('NewStrongPass#2024') WHERE User='root';
DELETE FROM user WHERE User='';
DELETE FROM user WHERE Host='%';
FLUSH PRIVILEGES;

MySQL 8.0 特殊注意事項

  • authentication_string 儲存雜湊,plugin 欄位指定驗證插件 (caching_sha2_password 預設 / mysql_native_password)。
  • 重置密碼建議使用官方語法:ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass#2024'; (需授權表生效時)。
  • --skip-grant-tables 模式下無法使用 ALTER USER,必須直接 UPDATE user 表並手動設定 plugin。
  • 8.0 授權表為 InnoDB,**不可直接複製 .ibd 檔案** (需表空間 ID 匹配),方案一**不適用 8.0**。

事後加固 (必做)

  1. 密碼存入密碼管理器 (Bitwarden/1Password/Vault)。
  2. 建立專用 DBA 帳號:CREATE USER 'dba'@'10.0.0.%' IDENTIFIED BY '...' REQUIRE SSL; GRANT ALL ON *.* TO 'dba'@'10.0.0.%' WITH GRANT OPTION;
  3. 禁用 root 遠端:DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); FLUSH PRIVILEGES;
  4. 啟用審計日誌:INSTALL PLUGIN audit_log SONAME 'audit_log.so';
  5. 記錄事件:時間、操作人、原因、驗證結果,納入變更管理系統。
copyright © 萬盛學電腦網 all rights reserved