萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux MySQL 修改 root 密碼全攻略:正常修改與忘記密碼重置

MySQL root 密碼管理是 DBA 基本功。本文覆蓋三大場景:**已知密碼修改**、**命令行非交互修改**、**完全忘記密碼的緊急重置**,均在 Linux 環境下實測有效。

場景一:已知舊密碼,登錄 MySQL 修改

mysql -uroot -p
# 輸入舊密碼
mysql> USE mysql;
mysql> UPDATE user SET authentication_string=PASSWORD('new_pass') WHERE user='root';
# MySQL 5.7+ 字段為 authentication_string,5.6 為 password
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

注意:MySQL 8.0 建議使用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_pass';。

場景二:已知舊密碼,命令行單行修改(適合腳本自動化)

mysqladmin -u root -p'old_pass' password 'new_pass'
# 或
mysql -uroot -p'old_pass' -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_pass';"

場景三:忘記 root 密碼,緊急重置(核心:skip-grant-tables)

⚠ 禁用 pkill mysqld!

直接殺進程會導致 mysqld dead but subsys locked,後續甚至無法在安全模式啟動。正確停止姿勢:

/etc/init.d/mysqld stop
# 或 systemctl stop mysqld

標準重置流程

  1. 啟動跳過授權表模式:
mysqld_safe --skip-grant-tables --skip-networking &
# --skip-networking 防止無授權時遠程連接,安全第一
# & 後台運行,另開終端操作
  1. 無密碼登錄並修改:
mysql
mysql> USE mysql;
# MySQL 5.7+
mysql> UPDATE user SET authentication_string=PASSWORD('new_pass') WHERE user='root';
# MySQL 8.0
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_pass';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
  1. 正常重啟:
/etc/init.d/mysqld stop
/etc/init.d/mysqld start
# 驗證
mysql -uroot -p'new_pass' -e "SELECT VERSION();"

常見坑點

  • 大小寫敏感:PASSWORD('...') 函數名大小寫不敏感,但 'new_pass' 字符串內容嚴格區分大小寫。
  • Plugin 欄位:MySQL 5.7+ user 表有 plugin 列,若為 auth_socket(Ubuntu 默認),需同步修改:UPDATE user SET plugin='mysql_native_password' WHERE user='root';。
  • 多主機授權:若需遠程訪問,同步更新 'root'@'%' 或創建專用運維賬號(推薦)。

安全加固建議

  1. 執行 mysql_secure_installation 移除匿名用戶、禁止 root 遠程登錄、刪除 test 庫。
  2. 使用密碼管理器生成 32+ 字符高強度密碼。
  3. 配置 max_connect_errors、skip-name-resolve、SSL 加密連接。

掌握這三種場景,無論是例行輪換還是凌晨三點被叫醒重置密碼,都能從容應對。

copyright © 萬盛學電腦網 all rights reserved