誤刪MYSQL數據庫數據丟失找回方法


簡介:

  MySQL 的二進制日志 binlog 可以說是 MySQL 最重要的日志,它記錄了所有的 DDL 和 DML 語句(除了數據查詢語句select、show等),以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進制日志是事務安全型的。binlog 的主要目的是復制和恢復。當然了,使用binlog日志所恢復的數據只能是部分數據,並不能夠使用binlog日志來做數據庫的備份,如果想要做數據庫備份,依然要使用我們傳統的備份方法,而binlog可以作為增量備份。

docker部署的MySQL8.0.19

 

  • 在啟動容器之前先要創建好要掛載出來的目錄文件
  • 容器啟動后,連接數據庫

查看mysqlbinlog是否開啟命令:

不清楚日志文件的名稱可以使用

  • 在數據庫中創建一個數據庫、表,插入一些數據,就會在容器中的/var/lib/mysql目錄下看到日志文件,或者是看掛載出來對應的目錄上

掛載的目錄:

通過binlog還原數據庫

  • ##起始時間點
    ##結束時間點
    ##起始位置
    ##結束位置

// 將binlog日志文件關於tide庫的sql轉出到文件
mysqlbinlog binlog.000022 -d {database名稱} > tide.sql

  • 誤操作:
    • 情景1:刪除了表中某一條數據
    • 行數:首先找到當天的binlog0000XX 文件,定位到刪除操作在日志的行數
    • 使用 mysqlbinlog —start-position=XXXXX -- stop-position=XXXXX binlog.0000XX > XXXX.sql
    • 將sql中的delete操作改為insert,重新source 到數據中
    • 時間: 確定操作所在的時間區間
    • 使用mysqlbinlog —start-datetime=‘XXX’ —stop-datetime=‘XXX’ binlog.0000XX > XXXX.sql
    • 同上,將sql中的delete操作改為insert,重新source 到數據中
    • 情景2:清空數據庫或者某一個表
    • 首先,找到刪除/清除操作在哪個日志中,以及所在的位置
    • 不同於單個delete操作,改為insert后可以直接找回
    • truncate操作清空的數據比較多,需要從最初的日志文件一個個重新導入到數據庫
    • 注意:
    • 如果mysqlbinlog 開啟7天自動清除日志文件的話,數據就只能找回部分了
    • 定期備份是最好的辦法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM