mysql通過percona xtrabackup全備和mysql binlog實現基於時間點的資料庫恢復

selectshen發表於2015-02-26
前一段時間,開發人員不小心在delete的時候忘了加條件,把一張表的全部資料給刪了.
以下是模擬的恢復操作記錄:
--os rhel 5.6 x64
--mysql version 5.6.14
---------------原DB
1.把最新一次的完全備份(innobackupex全備)及備份作業日誌複製到一臺mysql測試機
    [root@selectshen full]#scp /u03/mysqlbackup/full/lfcmysql01_2015_02_26* root@123.0.0.101:/u03/

2.把最新一次完全備份後產生的binlog複製到測試機
    [root@selectshen full]#scp /u03/mysqldata/lfc01.000014 root@123.0.0.101:/u03/

3.把當前的my.cnf檔案複製到測試機
    [root@selectshen full]#scp /usr/my.cnf root@123.0.0.101:/u03/

----------------測試DB
4.解壓完全備份
    [root@selectshen u03]# mkdir restore
    [root@selectshen u03]# mv lfcmysql01_2015_02_26.tar.gz  /u03/restore/
    [root@selectshen u03]# cd restore/
    [root@selectshen restore]# ls
    lfcmysql01_2015_02_26.tar.gz
    [root@selectshen restore]# tar -xizf lfcmysql01_2015_02_26.tar.gz
    [root@selectshen restore]# ls
    backup-my.cnf  mysql                              test                    xtrabackup_logfile
    sdata        performance_schema                 xtrabackup_binary
    tsdata     ftsdata                         xtrabackup_binlog_info
    ibdata1        lfcmysql01_2015_02_26.tar.gz  xtrabackup_checkpoints
    [root@selectshen restore]# mv lfcmysql01_2015_02_26.tar.gz  ../

4.根據my.cnf移動檔案並開啟資料庫
    [root@selectshen restore]# cd ..
    [root@selectshen u03]# mv my.cnf /usr/my.cnf
    [root@selectshen u03]# cd restore
    [root@selectshen restore]# mv * /u02/mysqldata/
    [root@selectshen restore]# cd /u02/mysqldata/
    [root@selectshen mysqldata]# chown -R mysql.mysql *
    [root@selectshen mysqldata]# service mysql start
    Starting MySQL...................                          [  OK  ]

5.通過mysqlbinlog binlog把資料庫恢復到刪除前
    [root@selectshen restore]# cd /u02/mysqldata/
    --檢視全備結束時binlog的position
        [root@selectshen mysqldata]# cat xtrabackup_binlog_info
        lfc01.000014   449091457
        [root@selectshen mysqldata]# cd /u03
    --匯出binlog,查詢delete語句的binlog position,此處用-v是因為binlog的格式是row.
    定位的時候可根據大概的時間點區間(start-datetime&stop-datetime),縮小查詢的日誌量.
    [root@selectshen u03]# mysqlbinlog lfc01.000014 -d ftsdata -v --start-position=449091457>a.txt

    --這一步如果有報
    ERROR: Error in Log_event::read_log_event(): 'Found invalid event in binary log', data_len: 234, event_type: 546
    Could not read entry at offset 5645353:Error in log format or read error
    不一定是你的mysqlbinlog版本有問題,也有可能是你指定的binlog的start-position值有問題。

    --查詢a.txt中執行delete from tb的position # at 449120400

    --執行恢復日誌到資料庫
        [root@selectshen u03]# mysqlbinlog lfc01.000014 -d ftsdata  --start-position=449091457 --stop-position=449120400 |mysql         -uroot -p

6.恢復完成,把要還原的表資料dump出來,然後匯入到原DB.

PS:percona xtrabackup 安裝及自動備份在博文 mysql for linux 安裝中 http://blog.itpub.net/28539951/viewspace-1309652/
    

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28539951/viewspace-1442270/,如需轉載,請註明出處,否則將追究法律責任。

相關文章