MySQL 基于时间点与位置恢复

基于时间点与位置恢复

利用二进制日志能够实现基于时间与位置的恢复,例如因为误操做删除了一张表,这时候彻底恢复是没用的,由于日志里面仍是存在错误语句,咱们须要的是恢复到误操做以前的状态,而后跳过误操做数据,再恢复后面操做语句
假定须要往里数据库中插入两条数据,但因为误操做,两条插入语句中间删除了条数据,而这条数据不该该删除的。mysql

create database cai; //建立新数据了 
建立表 ,而且写入两行化
开启二进制日志
彻底备份一次
mysqladmin -u root -p flush-log  //生成日志文件,此内容为添加的zhangsan,lisi的信息
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 > /opt/info.txt  //将二进制文件解密后生成生一个新的文本文件.txt

MySQL 基于时间点与位置恢复

当以为操做有风险的时候能够考录是用基于时间点恢复日志 固然仍是要开启二进制日志

MySQL 基于时间点与位置恢复

解密后生成的文本
mysqlbinlog --no-defaults --bases64-output=decode-rows -v mysql-bin.000002 >/opt/info.txt   //把解密后二进制文件从新生成一个文本文档
vim /opt/infon.txt  //查看里面须要的参数
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
........./////省略  
时间点 操做了对info表进行了添加
# at 341  //标记号 也能够居位置标记号恢复 也可也基于时间点恢复
180707 12:05:31 server id 1  end_log_pos 391 CRC32 0x7a99109e  Write_rows: table id 108 flags: STMT_END_F
### INSERT INTO `cai`.`info`
### SET
###   @1='xiaokeai01'
###   @2=88.00
# at 391
#180707 12:05:31 server id 1  end_log_pos 422 CRC32 0x8be308f6  Xid = 35
错误标记号 时间点
# at 609
#180707 12:06:12 server id 1  end_log_pos 657 CRC32 0xe5821dc6  Delete_rows: table id 108 flags: STMT_END_F
### DELETE FROM `cai`.`info`
### WHERE
###   @1='zhangsan'
###   @2=88.00
# at 657
正确操做 标记号 时间点
# at 875
#180707 12:06:16 server id 1  end_log_pos 925 CRC32 0x60ef5b40  Write_rows: table id 108 flags: STMT_END_F
### INSERT INTO `cai`.`info`
### SET
###   @1='xiaokeai02'
###   @2=88.00
# at 925

基于时间点进行恢复

mysqlbinlog --no-defaults --stop-datetime='2018-07-07 12:06:12' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p  //基于时间恢复 从开头到指定的时间中止 以前的都会执行操做
mysqlbinlog --no-defaults --start-datetime='2018-07-07 12:06:16' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p  //基于正确的时间恢复 从指定的时间点到结尾都会执行操做

MySQL 基于时间点与位置恢复
MySQL 基于时间点与位置恢复

基于行号恢复
mysqlbinlog --no-defaults --stop-position='558' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p  //错误操做 从开头的内容一直碰到 指定的错误行号便会停下 以前的都会执行
mysqlbinlog --no-defaults --stop-position='558' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p  //正确操做 从指定的正确的行号到结尾都会执行
# at 558  //标记号  stop--position='558' 
#180707 12:06:12 server id 1  end_log_pos 609 CRC32 0xcf4ae275  Table_map: `cai`.`info` mapped to number 108
# at 609 ///误删标记行开始
#180707 12:06:12 server id 1  end_log_pos 657 CRC32 0xe5821dc6  Delete_rows: table id 108 flags: STMT_END_F
### DELETE FROM `cai`.`info`
### WHERE
###   @1='zhangsan'
###   @2=88.00
# at 657  //正确行开始 start

MySQL 基于时间点与位置恢复

相关文章
相关标签/搜索