root 密碼遺失是常見運維場景。核心思路:跳過權限表啟動 MySQL(--skip-grant-tables) → 免密登錄 → 更新 mysql.user 表 → 刷新權限 → 正常重啟。以下提供 Windows 與 Linux 兩套完整步驟。
net stop mysql 或任務管理器結束 mysqld.exe。systemctl stop mysqld 或 /etc/init.d/mysql stop。mysqld --skip-grant-tables --console(保持窗口開啟)。mysqld_safe --skip-grant-tables --skip-networking &(後台運行,--skip-networking 禁止遠程連接提升安全)。mysql -u root -p
-- 直接回車,無需密碼
MariaDB [(none)]> USE mysql;
MariaDB [mysql]> UPDATE user SET authentication_string=PASSWORD('NewPass123!') WHERE User='root';
-- MySQL 5.7+ 字段為 authentication_string,5.6 為 password
MariaDB [mysql]> FLUSH PRIVILEGES;
MariaDB [mysql]> EXIT;
C:\mysql-init.txt,內容:ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
mysqld --init-file=C:\\mysql-init.txt --console。/etc/mysql/debian.cnf 獲取 user、password(通常為 debian-sys-maint)。mysql -u debian-sys-maint -p 登錄,執行上述 UPDATE user ... FLUSH PRIVILEGES;。caching_sha2_password,若客戶端不支援需改回 mysql_native_password:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPass';。FLUSH PRIVILEGES;,否則新密碼不生效。mysql 系統庫。