利用二进制日志可以实现基于时间与位置的恢复,例如由于误操作删除了一张表,这时候完全恢复是没用的,因为日志里面还是存在错误语句,我们需要的是恢复到误操作之前的状态,然后跳过误操作数据,再恢复后面操作语句
假定需要往里数据库中插入两条数据,但由于误操作,两条插入语句中间删除了条数据,而这条数据不应该删除的。
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
当觉得操作有风险的时候可以考录是用基于时间点恢复日志 当然还是要开启二进制日志
解密后生成的文本
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 //基于正确的时间恢复 从指定的时间点到结尾都会执行操作
基于行号恢复
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