背景:本次的恢复操作是在另外一台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
查看数据已经恢复