通過 skip-grant-tables 跳過權限表驗證,免密登錄修改 mysql.user 表的 authentication_string 字段(5.7+ 棄用 password 字段)。
vim /etc/my.cnf # 在 [mysqld] 區塊添加 skip-grant-tables
systemctl restart mysqld # 或 service mysqld restart
mysql -u root -p
# 直接回車,無需密碼
USE mysql;
# 5.7+ 必須用 authentication_string
UPDATE user SET authentication_string=PASSWORD('NewPass123!') WHERE User='root';
FLUSH PRIVILEGES;
QUIT;
vim /etc/my.cnf # 刪除或註釋 skip-grant-tables systemctl restart mysqld
mysql -u root -p # 輸入新密碼 # 5.7 要求首次登錄必須重置密碼 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
若報錯 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements:
-- 降低密碼策略至 LOW(僅檢查長度) SET GLOBAL validate_password_policy=LOW; SET GLOBAL validate_password_length=4; -- 重新設置密碼 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!'; -- 恢復生產級策略(可選) SET GLOBAL validate_password_policy=MEDIUM; SET GLOBAL validate_password_length=8;
caching_sha2_passwordALTER USER 'root'@'localhost' IDENTIFIED BY 'pass';mysql_native_password:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass';#!/bin/bash
# reset_mysql_root.sh
systemctl stop mysqld
sed -i '/^\[mysqld\]/a skip-grant-tables' /etc/my.cnf
systemctl start mysqld
mysql -u root -e "USE mysql; UPDATE user SET authentication_string=PASSWORD('TempPass123!') WHERE User='root'; FLUSH PRIVILEGES;"
sed -i '/skip-grant-tables/d' /etc/my.cnf
systemctl restart mysqld
mysql -u root -p'TempPass123!' -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';"
echo "Root 密碼已重置為 NewStrongPass123!"