首頁 > 資料庫 > mysql教程 > 怎麼透過日誌檔案恢復MySQL數據

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

王林
發布: 2023-05-26 15:49:06
轉載
3473 人瀏覽過

    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
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板