本文主要介绍数据备份和恢复的相关概念

备份:存储的数据副本;

原始数据:持续改变;

恢复:把副本应用到线上系统;

仅能恢复至备份操作时刻的数据状态;

时间点恢复:通过binary logs实现基于时间点的恢复; 

为什么备份

灾难恢复:硬件故障(冗余,仅解决硬件不可用时,服务正常提供)、软件故障(bug)、自然灾害、******、误操作(人为错误操作导致,出现几率最大)、...

测试;将生产的数据拷贝到测试环境中做测试,达到和生产环境一样的效果

备份会造成对系统的I/O压力,决定如何备份要权衡

备份时应该注意事项:

能容忍最多丢失多少数据;

恢复数据需要在多长时间内完成;

需要恢复哪些数据;决定了要备份哪些数据

做恢复演练:

测试备份的可用性;

增强恢复操作效率;

根据备份类型分类:

备份的数据集的范围:

完全备份和部分备份

完全备份:整个数据集;

部分备份:数据集的一部分,比如部分表;

全量备份、增量备份、差异备份:

完全备份:备份所有的数据

增量备份:仅备份自上一次完全备份或 增量备份以来变量的那部数据;

差异备份:仅备份自上一次完全备份以来变量的那部数据;差异是增量的另一表现形式。这样会导致占用更多的空间,但是好处是,恢复时间会比增量备份恢复来得快

可以根据需求来实现用哪种备份形式

如数据库异常时,先用全部恢复,再用增量恢复,最后再用二进制文件来重复对应时间段的恢复,完成完整的恢复。

物理备份、逻辑备份:

物理备份:复制数据文件进行的备份;不需要启动mysql服务,直接复制相关文件,效率更高。

逻辑备份:从数据库导出数据另存在一个或多个文件中;数据量较小的时候很常用。通过mysql语句进行备份

数据量大的时候,建议使用物理备份。

根据数据服务是否在线:

热备:读写操作均可进行的状态下所做的备份;最可行的方案。可能会导致数据的时间戳不一致,如备份过程,有些数据同时被更改了,导致数据时间戳不一样。所以热备技术复杂度很高,但是这个是必须要使用的。所以需要有技术来实现。myISAM不支持热备,innodb引擎支持热备。

注意,innodb可以做热备的原因有两个

1.lsn:日志序列号,每次日志增加时,这个数值就会被加1,会一直累加。做全量备份,就会使得lsn一直增加到最大值。

innodb使用表空间来存储数据,表空间内部有黑盒,可以理解为把表空间分成多个数据块,每一刻都是独立而自制的单位,会通过日志序列号(lsn)来记录,如果数据块的数据被修改,那么lsn就会增加,如第一块数据块被修改了,则加1,如lsn 为1,此时第二块数据块被修改,再加1,,此时lsn为2,之后lsn依次累加。备份是可以根据lsn的序列号进行恢复。

2.关键因素,innodb支持mvcc机制,为每个事务启用快照。因此读取到的数据都是启用事务那个时刻的数据。相当于是内部快照功能,通过快照可以访问到时间点同一的数据,所以innodb可以支持热备。

温备:可读但不可写状态下进行的备份;基本不可行,因为不能写入,很多功能不能实现

冷备:读写操作均不可进行的状态下所做的备份;最安全,但是基本不用。如果有数据库主从复制时,可以停掉主的,使用从的,这样就可以实现冷备。

备份需要考虑因素:

锁定资源多长时间?

备份过程的时长?

备份时的服务器负载?

恢复过程的时长?

备份策略:

全量+差异 + binlogs

全量+增量 + binlogs

备份手段:物理、逻辑

建议采用物理热备,因为物理备份性能好,效率高,热备不中断业务。

实现方法:

mysqldump+binlog

lvm2+cp/tar+binlog

xtrabackup(innodb)+binlog

备份什么?

数据

二进制日志、InnoDB的事务日志;

代码(存储过程、存储函数、触发器、事件调度器)

服务器的配置文件

备份工具:

mysqldump:mysql服务自带的备份工具;逻辑备份工具;

支持完全备份和部分备份;

InnoDB引擎中mysqldump支持热备;

MyISAM引擎中mysqldump支持温备;

cp/tar:复制后归档

借助lvm2的快照(请求一个全局锁)功能进行备份,之后立即释放锁,达到几乎热备的效果(快照执行速度快,执行的时候不能被访问,所以叫几乎热备,中断时间短,但是lvm出现故障后数据恢复困难,但是lvm扩展起来方便);属于物理备份;

注意:不能仅备份数据文件;要同时备份事务日志;前提:要求数据文件和事务日志位于同一个逻辑卷;

xtrabackup:实现innobackup(innobackup是收费的,但是这个工具很好用)的功能的另一个工具,由Percona提供,开源工具,支持对InnoDB做热备,物理备份工具;

完全备份、部分备份;

完全备份、增量备份;

完全备份、差异备份;

mysqlhotcopy:实现几乎冷备,mysql自带

select:一般用于一张表中的一些行,用这个工具,其他情况不用

备份:SELECT cluase INTO OUTFILE 'FILENAME';

恢复:CREATE TABLE 

导入:LOAD DATA 

备份建议使用mysqldump 或者 xtrabackup这两个工具来实现。针对这这两个工具如何实现备份将通过例子进行介绍

xtrabackup:支持物理备份

全量+差异+binlog ,如每个月做全量,每天做差异,再用binlog做时间点备份

全量+增量+binlog

mysqldump:只支持全量,数量量小,如几十G的数据,可以用这个工具

    全量+binlog