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