遺失 MySQL Root 密碼是運維常見急事。本文提供標準 skip-grant-tables 緊急重置流程,並延伸至 WordPress、Discuz 等常見應用的資料庫密碼修改方法,附帶生產環境安全操作提醒。
vim /etc/my.cnf,在 [mysqld] 區塊加入 skip-grant-tables。service mysqld restart(或 systemctl restart mysqld)。mysql -u root(無需 -p)。mysql> USE mysql;
mysql> UPDATE user SET Password = PASSWORD('your_new_pass') WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
skip-grant-tables,再次 service mysqld restart。skip-grant-tables 會完全關閉權限檢查,任何人可免密以 Root 身份登入,僅在受信內網、極短時間內使用。SHOW VARIABLES LIKE 'skip_grant_tables'; 為 OFF。同理可用 skip-grant-tables 進入對應資料庫修改:
mysql> USE wordpress;
mysql> UPDATE wp_users SET user_pass = MD5('new_pass') WHERE user_login = 'admin';
mysql> FLUSH PRIVILEGES;
-- Discuz X 系列
mysql> USE discuz_db;
mysql> UPDATE pre_ucenter_members SET password = MD5(CONCAT(MD5('new_pass'), salt)) WHERE username = 'admin';
mysql> UPDATE pre_common_member SET password = MD5(CONCAT(MD5('new_pass'), salt)) WHERE username = 'admin';
mysql> FLUSH PRIVILEGES;
| 方法 | 指令 | 場景 |
|---|---|---|
| SET PASSWORD | SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new'); | SQL 介面 |
| mysqladmin | mysqladmin -u root -pold password new | 命令列/腳本 |
| UPDATE user 表 | UPDATE mysql.user SET Password=PASSWORD('new') WHERE User='root'; FLUSH PRIVILEGES; | 批次/底層 |
validate_password 插件強制密碼複雜度。admin'@'10.0.0.% 等受限帳號替代 Root 日常運維。掌握「緊急重置」與「常規輪換」雙軌流程,讓資料庫存取控制始終掌握在自己手中。