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

MySQL 忘記 root 密碼?免重啟服務的安全找回實戰

     編輯:MySQL 綜合教學

場景:無 root 密碼、有 OS root 權限、不想重啟 MySQL

傳統方案:skip-grant-tables 需重啟服務,影響業務。本文介紹 利用 MyISAM 表文件複製 + SIGHUP 熱加載 的零停機方案。

核心原理

  • 權限表 mysql.user 是 MyISAM,文件級複製即時生效
  • MySQL 收到 SIGHUP 會重新讀取授權表 (相當於 FLUSH PRIVILEGES)
  • 先用低權限賬號 (如應用賬號) 登入,複製 mysql.user 到可寫庫 (如 test),修改密碼哈希,複製回原位,發送 SIGHUP

實戰步驟 (假設應用賬號 readwrite 有 test 庫寫權限)

  1. 複製權限表:
    cd /var/lib/mysql
    cp mysql/user.* test/
    chown mysql:mysql test/user.*
    
  2. 低權限登入修改:
    mysql -ureadwrite -p test
    UPDATE test.user SET password=PASSWORD('NewPass123') WHERE user='root' AND host='localhost';
    
  3. 複製回原位 + 熱加載:
    cp test/user.MY* mysql/
    kill -SIGHUP $(pidof mysqld)
    
  4. 驗證:
    mysql -uroot -p'NewPass123'
    SHOW GRANTS;
    

關鍵風險與應對

風險應對
舊密碼被遺留應用使用修改前備份原哈希,或改建新超管賬號再恢復舊哈希
權限表損壞導致無法登入操作前備份 mysql/user.*,失敗可還原
MySQL 8.0+ 權限表改為 InnoDB此法僅適用 5.7 及之前 (MyISAM 權限表),8.0 需官方重置流程

適用版本

MySQL 5.1 / 5.5 / 5.6 / 5.7 (權限表為 MyISAM)。MySQL 8.0 請用 --init-file 重啟重置。

原文:Recovering MySQL access without restart
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved