首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Root 密碼重置全攻略:跳過權限表與資料目錄陷阱

     編輯:MySQL 綜合教學

適用場景

  • 忘記 Root 密碼需重置。
  • 全新安裝後無法以密碼登入 (常因匿名用戶干擾)。
  • 需遷移資料目錄後導致權限異常。

標準重置流程 (通用 Linux/Unix)

  1. 停止 MySQL 服務
    /etc/init.d/mysqld stop
    # 或 systemctl stop mysqld
  2. 以跳過權限表模式啟動
    /usr/local/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking &

    關鍵參數說明:

    • --skip-grant-tables:跳過權限驗證,允許無密碼登入。
    • --skip-networking:禁用網路連線,僅允許本地 Unix Socket 連線,提升安全性。
    • &:後台運行。
  3. 免密登入並修改密碼
    /usr/local/mysql/bin/mysql
    # 進入 mysql> 提示符後
    UPDATE mysql.user SET Password = PASSWORD('123456') WHERE User = 'root';
    FLUSH PRIVILEGES;

    MySQL 5.7+ 版本語法不同:

    UPDATE mysql.user SET authentication_string = PASSWORD('123456') WHERE User = 'root';
    FLUSH PRIVILEGES;
  4. 重啟 MySQL 正常服務

    殺掉 mysqld_safe 進程,正常啟動 service mysqld start,即可使用新密碼登入。

常見陷阱:資料目錄不匹配導致「密碼錯誤」

現象

執行 mysqld_safe --skip-grant-tables 後,免密登入成功,但修改密碼後正常啟動仍提示 Access denied。

原因

mysqld_safe 預設讀取編譯安裝路徑下的 data 目錄 (如 /usr/local/mysql/data),若實際資料目錄在其他位置 (如 /opt/mysql/data),會啟動一個空的臨時實例,修改的密碼寫入臨時實例的 mysql.user 表,而非生產資料目錄。

解決方案

  1. 指定配置檔啟動 (推薦):
    mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking &

    確保 my.cnf 中 [mysqld] 區段的 datadir 指向正確路徑。

  2. 建立軟連結 (快速修復):
    ln -s /opt/mysql/data /usr/local/mysql/data
  3. 直接指定參數啟動:
    mysqld_safe --skip-grant-tables --skip-networking --datadir=/opt/mysql/data --basedir=/usr/local/mysql &

重置後建議操作

  1. 刪除匿名用戶:DELETE FROM mysql.user WHERE User = ''; FLUSH PRIVILEGES;
  2. 禁止 Root 遠程登入:UPDATE mysql.user SET Host = 'localhost' WHERE User = 'root'; FLUSH PRIVILEGES; (或僅允許特定 IP)。
  3. 移除測試資料庫:DROP DATABASE test; DELETE FROM mysql.db WHERE Db = 'test' OR Db LIKE 'test\\_%'; FLUSH PRIVILEGES;
  4. 運行 mysql_secure_installation:自動化完成上述安全加固步驟。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved