3.2 KiB
3.2 KiB
备份
概述
通常来讲,备份分为如下类型:
- Hot Backup(热备):在数据库运行的同时直接备份,同时也被称为
在线备份 - Cold Backup(冷备):在数据库停止的情况下进行备份,一般只需要复制数据库的物理文件
离线备份 - Warm Backup(温备):Warm Backup类似于Hot Backup,同样也是在数据库运行时进行备份,但是和Hot Backup相比,Warm Backup会对当前数据库的操作存在影响(
例如,在备份时添加全局的共享锁,从而保证备份数据的一致性)、
按照备份后的文件内容,也可以对备份做出如下划分:
- 逻辑备份:对mysql而言,逻辑备份代表备份后产生的文件,其文件内容是可读的,一般由文本组成,内容是
sql语句或是表内的实际数据- 常用的逻辑备份有
mysqldump和select * into outfile等,这种方式可以观察导出文件的内容 - 对于逻辑备份而言,其恢复过程一般耗时较长
- 常用的逻辑备份有
- 裸文件备份:裸文件备份是指对数据库的物理文件进行复制,既可以在数据库运行时进行复制,也可以在数据库停止运行时复制
- 对于裸文件备份,其数据恢复的耗时一般远小于逻辑备份
若按照数据库备份的内容,即可以对备份做出如下划分:
- 完全备份:完全备份是指对数据库中所有数据做一个全量备份
- 增量备份:增量备份是指在上次完全备份的基础上,对发生修改的数据进行备份
- 日志备份:对于mysql而言,日志备份主要是指对mysql数据库的binlog进行备份,其记录了
对数据库造成修改的事件,通过对binlog进行replay,能够实现数据库的point-in-time恢复- 对于mysql数据库的
replication,其原理即是异步的将binlog传输到slave数据库,并在slave数据库对binlog的内容进行replay
- 对于mysql数据库的
增量备份原理
在mysql中,并没有官方的增量备份方法被提供,大多是通过binlog来完成增量备份的工作。通过binlog来实现的备份较增量备份方案来说效率较低。
xtrabackup工具提供了增量备份方案,其原理是通过记录每页最后的checkpoint lsn,如果大于之前全量备份时的lsn,那么就对该页进行备份,否则无需备份该页。
数据一致性
在进行数据备份时,要求数据在备份时是一致的。例如在玩家购买道具时,其会先扣款并对道具进行增加,如果数据不一致,那么则可能发生扣款已经发生但是道具尚未被添加这类数据不一致的情况。
对于innodb而言,由于其支持mvcc,故而对保证数据一致性的备份实现比较简单。在备份时,可以先开启一个事务,然后导出一系列相关的表,然后提交。由于undo log和read view的设计,可以保证事务中读取到的数据是一致的。
对于mysqldump工具而言,可以通过添加--single-transaction选项来获取innodb的一致性备份,原理和上述所示的相同,备份逻辑会在一个长事务中执行。在使用mysqldump进行备份时,务必添加--single-transaction选项。