MySQL利用mysqlbinlog模拟增量恢复

背景:本次的恢复操作是在另外一台MySQL实例上进行,不是在同一个实例中操作的。相当于生产的数据库恢复到一个全新的实例上了

1 创建库表并插入数据 

#创建库
create database test;
# 切换库
use test;
# 创建表 带有自动更新的时间戳,方便下面的实验
CREATE TABLE t (
	ID INT (10) NOT NULL AUTO_INCREMENT,
	USER_NAME VARCHAR (50) DEFAULT '',
	`CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`UPDATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
	PRIMARY KEY (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 COMMENT = '测试表';

# 插入数据,只插入ID 和 USER_NAME,时间戳有默认值会自动插入
INSERT INTO t (ID, USER_NAME)
VALUES
	(1, '张三'),
	(2, '李四'),
	(3, 'zl'),
	(4, 'yh'),
	(5, 'jack')

 2 进行全量备份(模拟日常的数据库全量备份)

mysqldump -uroot -proot -h10.238.162.31 --master-data=2  --single-transaction --databases test > /server/backup/test.sql

3 全量备份之后进行数据的插入(模拟全量备份后数据库之后的改变)

INSERT INTO t (ID, USER_NAME)
VALUES
	(6, 'rose'),
	(7, 'nico')

 此时t表的数据如下,有7条数据

 

4 利用这些备份恢复至数据库的最新状态(模拟现在的数据库服务器宕机不能启动或者数据被破坏,但是数据库做了异地备份,即有数据库的全量备份和日志备份。)

 首先在另一个MySQL实例上进行全量恢复

mysql -uroot -proot < test.sql

此时查看t表的数据是全量备份当时时间点的数据,没有全量备份之后的数据

5 利用mysqlbinlog工具进行数据库增量恢复  

首先查看全量备份文件中备份到那个点 

利用这个binlog文件号和偏移量将数据库恢复至最新的状态 

mysqlbinlog --start-position=2263  mysql-bin.000008 |mysql -uroot -proot

查看数据已经恢复

posted @ 2020-05-06 20:59  DBA社区  阅读(163)  评论(0编辑  收藏  举报