萬盛學電腦網

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

MySQL 修改密碼全攻略:知密碼修改、忘記密碼重置、phpMyAdmin 圖形化操作

場景一:記得當前密碼,需修改(Root 或任意用戶)

方法 1:SQL 語句(通用、可腳本化)

-- 登錄
mysql -u root -p

-- 修改 root 密碼 (MySQL 5.7+ / 8.0 推薦)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';

-- 修改任意用戶密碼
ALTER USER 'app_user'@'%' IDENTIFIED BY 'NewStrongPass123!';

-- 5.6 兼容寫法
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewStrongPass123!');
-- 或
UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

方法 2:mysqladmin 命令行工具(無需進入交互模式)

# 修改 root 密碼(舊密碼 -> 新密碼)
mysqladmin -u root -p'old_pass' password 'NewStrongPass123!'

# 修改其他用戶
mysqladmin -u app_user -p'old_pass' password 'NewStrongPass123!'

方法 3:phpMyAdmin 圖形化操作(可視化友好)

  1. 登錄 phpMyAdmin
  2. 頂部菜單 → **用戶帳號** → 編輯目標用戶(如 root@localhost)
  3. 「修改密碼」區域 → 輸入新密碼 → 執行
  4. 系統自動執行 SET PASSWORD / ALTER USER

phpMyAdmin 修改密碼入口

phpMyAdmin 輸入新密碼

場景二:完全忘記 Root 密碼(緊急重置)

核心原理:跳過授權表啟動 → 免密登錄 → 修改密碼 → 正常重啟

步驟詳解(Linux 為例,Windows 同理)

1. 停止 MySQL 服務

systemctl stop mysqld
# 或 service mysql stop

2. 跳過授權表 + 禁用網絡 啟動

mysqld_safe --skip-grant-tables --skip-networking &
# --skip-networking 關鍵:防止無密碼狀態下被外部連接

3. 免密登錄

mysql -u root

4. 修改密碼(版本差異)

版本修改語句
MySQL 8.0FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
MySQL 5.7FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!'; (或 UPDATE authentication_string)
MySQL 5.6 及之前UPDATE mysql.user SET Password=PASSWORD('NewPass123!') WHERE User='root'; FLUSH PRIVILEGES;

5. 正常重啟驗證

# 關閉跳過授權的進程
pkill -f "mysqld_safe --skip-grant-tables"
# 正常啟動
systemctl start mysqld
# 驗證
mysql -u root -p'NewPass123!'

場景三:MySQL 8.0 特有簡化流程

8.0 在 --skip-grant-tables 下**允許直接執行 ALTER USER**,無需先 FLUSH PRIVILEGES(但建議執行)。

mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
-- 可選
FLUSH PRIVILEGES;

場景四:init_file 自動化重置(容器/自動化運維首選)

  1. 創建 /tmp/reset_root.sql:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
    FLUSH PRIVILEGES;
    
  2. 啟動:mysqld --init-file=/tmp/reset_root.sql --skip-networking &
  3. 觀察日志報錯 ERROR 1820 表示已執行,正常重啟即可

常見坑點速查

現象原因解決
ERROR 1820: You must reset your password using ALTER USER密碼過期/首次登錄ALTER USER USER() IDENTIFIED BY 'new_pass';
修改後仍報 Access deniedHost 不匹配(如只有 root@127.0.0.1 無 root@localhost)SELECT User,Host FROM mysql.user; 補全記錄
validate_password 報錯密碼策略不滿足長度≥8、大小寫、數字、特殊字符;或臨時降級策略
Windows 下找不到 mysqld_safeWindows 用 mysqld.exemysqld.exe --skip-grant-tables --skip-networking
Docker 容器重置容器內修改不持久化掛載 /var/lib/mysql 卷,或重建容器時傳遞 MYSQL_ROOT_PASSWORD

安全加固:修改密碼後必做三件事

  1. 禁用 Root 遠程:DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); FLUSH PRIVILEGES;
  2. 創建業務專用賬號:最小權限、強密碼、限定 Host
  3. 啟用密碼策略與審計:INSTALL COMPONENT 'file://component_validate_password'; 配置長度、字典、混合字符

總結

MySQL 修改密碼:知密碼用 ALTER USER/SET PASSWORD/phpMyAdmin;忘密碼用 --skip-grant-tables --skip-networking + ALTER USER。版本差異只在 PASSWORD() vs authentication_string 與 FLUSH PRIVILEGES 必要性上。將重置流程標準化、腳本化、納入應急預案,才是運維成熟度的體現。

copyright © 萬盛學電腦網 all rights reserved