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

d6c37124b96cf97dfd1452ddafe0c07a.png

当觉得操作有风险的时候可以考录是用基于时间点恢复日志 当然还是要开启二进制日志

ff85146d21a98be07d9bab145052d58f.png

解密后生成的文本

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 //基于正确的时间恢复 从指定的时间点到结尾都会执行操作

628d4361e2ec0eff34f09e546bf12b3f.png

6cb595a2da789706b3e8d66176a39b9d.png

基于行号恢复

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

d940504310a5415d9c6e67af11f80399.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值