同 Windows:跳過權限表啟動 → 無密碼登入 → 修改 mysql.user 表 → 重新載入權限 → 正常重啟。
# 1. 停止服務
systemctl stop mysqld
# 2. 建立臨時 override
systemctl edit mysqld
# 在編輯器輸入:
# [Service]
# ExecStart=
# ExecStart=/usr/sbin/mysqld --skip-grant-tables --user=mysql
# 3. 重新載入並啟動
systemctl daemon-reload
systemctl start mysqld
# 4. 無密碼登入
mysql -u root
# 5. 修改密碼 (MySQL 8.0+)
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;
EXIT;
# 6. 恢復正常啟動
systemctl revert mysqld
systemctl daemon-reload
systemctl restart mysqld
# 1. 停止服務
systemctl stop mysqld
# 或
/etc/init.d/mysqld stop
# 2. 跳過權限啟動(背景執行)
mysqld_safe --skip-grant-tables --skip-networking &
# 3. 登入修改密碼(同方法一步驟 4-5)
# 4. 結束進程並正常啟動
pkill -f mysqld
systemctl start mysqld
# 1. 編輯 /etc/my.cnf 或 /etc/mysql/my.cnf
# 在 [mysqld] 區段加入
skip-grant-tables
# 2. 重啟服務
systemctl restart mysqld
# 3. 無密碼登入修改密碼(同步驟 4-5)
# 4. 移除 skip-grant-tables,重啟服務
systemctl restart mysqld
Debian 系安裝 MySQL 時會自動建立 debian-sys-maint 使用者,密碼存放在 /etc/mysql/debian.cnf,擁有完整權限。
# 1. 讀取密碼
cat /etc/mysql/debian.cnf
# 輸出範例:
# [client]
# host = localhost
# user = debian-sys-maint
# password = xxxxxxxxxxxxxxxx
# 2. 使用此帳號登入
mysql -u debian-sys-maint -p
# 輸入上述密碼
# 3. 修改 root 密碼
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;
# 1. 建立 SQL 腳本
echo "FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;" > /tmp/reset_root.sql
# 2. 停止服務
systemctl stop mysqld
# 3. 以 init-file 啟動(執行腳本後正常運行)
mysqld --init-file=/tmp/reset_root.sql --user=mysql &
# 4. 等待幾秒,新密碼生效
sleep 5
# 5. 正常登入驗證
mysql -u root -p'NewStrongPass123!' -e "SELECT VERSION();"
# 6. 正常重啟
pkill -f mysqld
systemctl start mysqld
| 版本 | 密碼欄位 | 修改語法 |
|---|---|---|
| 5.6 及之前 | password | SET PASSWORD = PASSWORD('x') |
| 5.7 | authentication_string | SET PASSWORD = 'x' / ALTER USER |
| 8.0+ | authentication_string | ALTER USER IDENTIFIED BY 'x' |
--skip-grant-tables 期間**任何人可無密碼登入**,務必加 --skip-networking 限制本機# 測試新密碼
mysql -u root -p -e "SELECT USER(), VERSION();"
# 建立備用帳號
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'AnotherStrongPass!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Linux 重置 MySQL root 密碼有 5 種方法:systemd override(推薦)、mysqld_safe、my.cnf、debian-sys-maint、init-file。現代系統首選 systemd override,不需修改設定檔、自動清理、最安全。操作核心相同:跳過權限 → 改密碼 → 恢復正常。