若無 root 權限,可通過以下任一方式獲取:
/etc/sudoers,取消 %wheel ALL=(ALL) ALL 註釋,將用戶加入 wheel 組:usermod -G wheel 用戶名。/etc/sudoers 中直接添加 用戶名 ALL=(ALL) ALL。/etc/passwd 將用戶 UID 改為 0 (不推薦,風險極高)。
/etc/init.d/mysqld stop
# 或 systemctl stop mysqld (CentOS 7)
# 切勿直接 pkill mysql,會導致 "mysqld dead but subsys locked" 需 start 再 stop 才能清理鎖文件
# 1. 先正常啟動一次獲取 mysqld_safe 路徑
/etc/init.d/mysqld start
ps -ef | grep mysql
# 記錄 mysqld_safe 路徑,通常為 /usr/bin/mysqld_safe
# 2. 停止服務
/etc/init.d/mysqld stop
# 3. 安全模式啟動 (後台運行)
/usr/bin/mysqld_safe --skip-grant-tables >/dev/null 2>&1 &
# 等待 5 秒確保啟動完成
/usr/bin/mysql -u root mysql
# 進入 mysql> 提示符後執行:
UPDATE user SET password = PASSWORD('新密碼') WHERE User = 'root';
FLUSH PRIVILEGES;
EXIT;
mysql -u root -p
# 輸入新密碼登入
mysql> SHOW DATABASES;
# 若報錯:ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
# 執行:
SET PASSWORD = PASSWORD('新密碼');
FLUSH PRIVILEGES;
# 再次測試 SHOW DATABASES 即可正常
mysqladmin -u root -p password "新密碼"
# Enter password: 輸入舊密碼
mysqld_safe 和 mysql 客戶端的實際安裝路徑 (用 ps -ef | grep mysql 獲取)。SET PASSWORD 刷新。