Linux 下安裝 MySQL,修改 root 密碼後 1 小時忘記。記錄三種恢復實戰過程。
user.frm(結構)user.MYD(數據)user.MYI(索引)/var/lib/mysql/mysql/ 下同名文件
chown -R mysql:mysql /var/lib/mysql/mysql/user.*
chmod 600 /var/lib/mysql/mysql/user.*
USE mysql;
UPDATE user SET Password=PASSWORD('newpass') WHERE User='root';
DELETE FROM user WHERE User='';
DELETE FROM user WHERE Host='%';
FLUSH PRIVILEGES;
局限:需擁有同版本/兼容結構的備份 user 表文件。
# 1. 正常停止
killall -TERM mysqld
# 2. 跳過授權表啟動
# Linux: /usr/bin/mysqld_safe --skip-grant-tables &
# Windows: mysqld --skip-grant-tables
# 3. 無密碼登錄修改
mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD('newpass') WHERE User='root';
mysql> FLUSH PRIVILEGES;
# 4. 正常重啟
killall -TERM mysqld
systemctl start mysqld
優勢:無需額外文件,所有版本通用,官方文檔推薦。
user.MYD 中加密密碼串不推薦常規使用,僅作極端環境下最後手段了解存儲結構。