首頁  >  文章  >  資料庫  >  怎麼透過日誌檔案恢復MySQL數據

怎麼透過日誌檔案恢復MySQL數據

王林
王林轉載
2023-05-26 15:49:063405瀏覽

    1、找到最新的binlog 檔案

    進入mysql 命令列執行如下指令

    mysql> show master status;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | binlog.000001 |       967 |
    | binlog.000002 |       965 |
    +------------------+-----------+

    一般最新的編號大,上面最新的就是binlog.000002

    2、找到我們想要恢復資料在日誌檔案裡的開始結束位置

    這裡有兩種方式來決定開始位置和結束位置,一種是使用時間作為開始結束,一種是使用日誌的position 作為開始結束位置

    2.1、使用時間範圍

    透過mysqlbinlog mysql-bin.000002 指令查看日誌內容,然後找到刪除的時間點:

    # at 131708213
    #210610 11:27:01 server id 1  end_log_pos 131708311 CRC32 0x0fc755e2     Table_map: `loongwind_base`.`xxxx` mapped to number 139
    # at 131708311
    #210610 11:27:01 server id 1  end_log_pos 131708411 CRC32 0xa91616b9     Write_rows: table id 139 flags: STMT_END_F
    
    BINLOG '
    BffBYBMBAAAAYgAAAJe12QcAAIsAAAAAAAEADmR4bWhfYmFzZV9oenN5ABpkeF9zeV9hc3NldHNf
    ZXh0ZW5kc19jb3B5MQAICAgIDwgSCBIEAAgAAPgBAQACA/z/AOJVxw8=
    BffBYB4BAAAAZAAAAPu12QcAAIsAAAAAAAMAAgAI/wDRAwAAm1M8AUIAAADRUjwBCgAAAFYL5gAM
    AOWFrOWuieacuuWFs7EBAADbwZkAmama6E+xAQAA28GZAJmpmuhPuRYWqQ==
    '/*!*/;

    然後確定上次備份的時間點,如果透過日誌找不到上次備份的時間點可以填一個你記憶中確定小於上次備份的時間點

    2.2 、使用position 範圍

    使用下列指令檢視日誌event 的position

    mysql -uroot -p'password' -e "show binlog events in 'binlog.000002'"|grep -i 'DROP TABLE'

    #執行結果如下:

    binlog.000002    820474948   Quuseery    820474948   DROP TABLE IF EXISTS `undo_log` /* generated by server */ /* xid=11790691 */

    即刪除的position 為820474948

    還是透過上述指令,即刪除的position 為820474948

    #或透過上述指令,即刪除的position 為820474948

    #或透過上述指令,即刪除的position 為820474948

    #或透過上述指令,即刪除的position 為820474948

    #或透過上述指令,即刪除的position 為820474948

    #或透過上述指令,即刪除的position 為820474948

    ####或透過上述指令,即刪除的position 為820474948###查找到上次備份的position 點######3、恢復######3.1 透過時間恢復###
    mysqlbinlog --no-defaults --database=loongwind_base --start-datetime="2021-06-07 09:00:00" --stop-datetime="2021-06-10 16:37:58" binlog.000005 | mysql -uroot -p'password' -s -N -f -D loongwind_base
    ###其中dxmh_base_hzsy 是資料庫名稱#######3.2 透過position 恢復# ##
    mysqlbinlog  --start-position=1178  --stop-position=2751 -d dxmh-sy binlog.000002|mysql -uroot -p'password' -s -N -f -D loongwind_base
    loongwind_base 为数据库名称
    ###如果實在找不到開始時間或開始position 也可以不寫--start-datetime 或--start-position ,這樣就是用這個日誌檔案的開始一直恢復到結束,為了防止與已有資料的衝突,需要加上-f 即force 跳過錯誤繼續往下執行。 ###

    以上是怎麼透過日誌檔案恢復MySQL數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除