1、核心思路
搞明白一件事:到底什么是增量备份?
答:① 要有全量备份 ② 继续增删改数据 ③ 再次需要备份时,不需要进行全量备份,只需要备份binlog日志文件即可(因为binlog日志记录了增删改操作的所有SQL语句)
2、增量备份实验步骤
第一步:先准备数据(前提)
第二步:开启二进制,然后做全量备份(全库备份)
第三步:继续对数据库进行增删改操作
第四步:突然发生了硬件故障,数据库丢失了
第五步:恢复全量备份导出的数据(不完整,可能只有90%)
第六步:备份二进制日志,根据其信息(导入剩余的10%的数据)
...
完成
3、增量备份的具体实践
第一步:准备数据
mysql> create database db_itheima default charset=utf8;
mysql> use db_itheima;
mysql> create table tb_student(
id int not null auto_increment,
name varchar(20),
age tinyint unsigned default 0,
gender enum('male','female'),
subject enum('ui','java','yunwei','python'),
primary key(id)
) engine=innodb default charset=utf8;
mysql> insert into tb_student values (null,'刘备',33,'male','java');
mysql> insert into tb_student values (null,'关羽',32,'male','yunwei');
mysql> insert into tb_student values (null,'张飞',30,'male','python');
mysql> insert into tb_student values (null,'貂蝉',18,'female','ui');
mysql> insert into tb_student values (null,'大乔',18,'female','ui');
第二步:开启二进制日志,重启服务,然后进行全库备份
# vim my.cnf
[mysqld]
...
server-id=10
log-bin=/mysql_3306/data/binlog
# service mysql_3306 restart
# rm -rf /tmp/sqlbak/*
# mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > /tmp/sqlbak/all.sql -p
第三步:继续对数据库进行增删改操作
mysql> insert into tb_student values (null,'小乔',16,'female','ui');
mysql> delete from tb_student where id = 3;
第四步:突然发生了硬件故障,数据库丢失了
# mysql -e "drop database db_itheima;" -p
Enter password:123
...故事开始了(删库)
第五步:动员运维工程师开始进行数据恢复,马上把最新的二进制文件进行备份
# cp /mysql_3306/data/binlog.000003 空格 /tmp/sqlbak/
第六步:先进行全库恢复
# mysql < /tmp/sqlbak/all.sql -p
Enter password:123
第七步:通过binlog增量备份还原数据到100%
学会读二进制日志文件,必须通过专业的工具
# mysqlbinlog /tmp/sqlbak/binlog.000003 => 重点找事故的临界点,如drop database
确认at位置
# mysqlbinlog --start-position=4 --stop-position=740 /tmp/sqlbak/binlog.000003 |mysql -p
到此恢复100%数据