mysql通过percona xtrabackup全备和mysql binlog实现基于时间点的数据库恢复

前一段时间,开发人员不小心在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* [email protected] :/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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28539951/viewspace-1442270/

你可能感兴趣的:(mysql通过percona xtrabackup全备和mysql binlog实现基于时间点的数据库恢复)