MYSQL–基础–07–使用binlog来恢复数据
1、数据准备
CREATE TABLE `course` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '课程id',
`name` varchar(10) DEFAULT NULL COMMENT '课程名称',
`tid` bigint(0) DEFAULT NULL COMMENT '教师id',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB COMMENT = '课程表' ;
INSERT INTO `course` VALUES (1, '语文', 2);
INSERT INTO `course` VALUES (2, '数学', 1);
INSERT INTO `course` VALUES (3, '英语', 3);
2、数据恢复
假设我们做了一个删除的操作,我们想恢复数据
delete from course where id=3;
2.1、查看当前日志
show master status;
2.2、刷新binlog日志,生成一个新的日志
我们先来刷新binlog日志,生成一个新的日志,那么我们之后所要操做的内容都会被记录到新的日志文件中,我们只需要对旧的日志做恢复就行了
flush logs;
SHOW MASTER STATUS;
2.3、查看旧日志
2.3.1、方式1
SHOW BINLOG EVENTS IN 'binlog.000001';
2.3.2、查看旧日志-方式2
root@e453d8892584:~# mysqlbinlog -vv '/var/lib/mysql/binlog.000001';
2.4、数据恢复–从建库前恢复
目的
我们直接恢复删除前的所有数据
注意
恢复前,先刷新日志,产生新日志binlog.000003,
不让恢复数据的日志写到 binlog.000002,而是写到binlog.000003。
方便之后恢复binlog.000002
查看恢复的起始点和结束点
我们看到delete_rows 结束点是2001这个点,起始点是在1806这个点,我们可以把操作的这些数据删除到我们上次备份的内容,然后通过执行binlog来进行恢复,当然恢复到1806这个点之前。
执行操作
mysqlbinlog --start-position=156 --stop-position=1806 /var/lib/mysql/binlog.000001 | mysql -uroot -p
因为我是从创建数据库前开始恢复,所以我需要先将数据库删掉,不然会报以下错误
恢复的数据
2.5、恢复删除后的操作
我们发现,删除数据后,我们插入的数据没显示,这个时候需要通过同样的方法,使用binlog.000002 日志来恢复
通过上面的日志文件,确认开始点和结束点
恢复数据
mysqlbinlog --start-position=311 --stop-position=766 /var/lib/mysql/binlog.000002 | mysql -uroot -p