萬盛學電腦網

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

Linux 下 MySQL Root 密碼重置完整指南:知密碼修改、忘記密碼救援、單用戶模式

場景一:知道當前密碼,正常修改

方法 1:SET PASSWORD(推薦,MySQL 5.7.6+ / 8.0)

mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 或
mysql> SET PASSWORD FOR 'root'@'localhost' = 'NewStrongPass123!';

方法 2:UPDATE user 表(舊版通用)

mysql -u root -p
mysql> USE mysql;
mysql> UPDATE user SET authentication_string=PASSWORD('NewPass') WHERE User='root' AND Host='localhost';
mysql> FLUSH PRIVILEGES;

MySQL 8.0 PASSWORD() 已移除,改用 authentication_string 直接存雜湊或用 ALTER USER。

方法 3:mysqladmin 命令列

mysqladmin -u root -p'oldpass' password 'newpass'
# 或指定主機
mysqladmin -u root -h localhost -p'oldpass' password 'newpass'

場景二:完全忘記 Root 密碼(跳過授權表啟動)

方法 A:--skip-grant-tables + --skip-networking(標準流程,需重啟兩次)

  1. 停止服務:systemctl stop mysqld
  2. 跳過授權啟動:mysqld_safe --skip-grant-tables --skip-networking &
  3. 無密碼登入:mysql -u root
  4. 修改密碼:
    USE mysql;
    -- MySQL 5.7 / 8.0
    UPDATE user SET authentication_string=null WHERE User='root' AND Host='localhost';
    FLUSH PRIVILEGES;
    -- 退出 mysql
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
  5. 正常重啟:systemctl restart mysqld

方法 B:init-file 單次重啟(更優雅)

  1. 建立 SQL 腳本 /tmp/reset_root.sql:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
  2. 停止服務:systemctl stop mysqld
  3. 帶初始化檔啟動:mysqld_safe --init-file=/tmp/reset_root.sql &
  4. 密碼已重置,刪除腳本:rm /tmp/reset_root.sql
  5. 正常重啟:systemctl restart mysqld

方法 C:系統服務 override(systemd 專用,最簡潔)

systemctl stop mysqld
systemctl set-environment MYSQLD_OPTS="--init-file=/tmp/reset_root.sql"
systemctl start mysqld
# 登入驗證後
systemctl unset-environment MYSQLD_OPTS
rm /tmp/reset_root.sql
systemctl restart mysqld

場景三:密碼過期/鎖定/插件問題

-- 檢查帳號狀態
SELECT User, Host, plugin, authentication_string, account_locked, password_expired FROM mysql.user WHERE User='root';

-- 解鎖
ALTER USER 'root'@'localhost' ACCOUNT UNLOCK;

-- 變更認證插件(8.0 預設 caching_sha2_password,舊客戶端可能不支援)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPass';

驗證新密碼

mysql -u root -p'NewStrongPass123!' -e "SELECT VERSION();"

安全建議

  • 密碼複雜度:≥12 字元,含大小寫、數字、特殊符號。
  • 禁用 root 遠程登入:DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; FLUSH PRIVILEGES;
  • 建立專用應用帳號,最小權限授權。
  • 定期輪換密碼,配合密碼管理工具。

總結

知密碼用 ALTER USER;忘密碼用 --init-file 單次重啟最乾淨。MySQL 8.0 認證體系變更大(caching_sha2_password、authentication_string),操作時留意版本差異。養成「備份先行、驗證後行」習慣,避免誤操作鎖死自己。

copyright © 萬盛學電腦網 all rights reserved