Files
rikako-note/mysql/mysql文档/mysql_备份.md
2025-08-31 00:52:37 +08:00

33 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 备份
## 概述
通常来讲,备份分为如下类型:
- 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中并没有官方的增量备份方法被提供大多是通过binlog来完成增量备份的工作。通过binlog来实现的备份较增量备份方案来说效率较低。
`xtrabackup`工具提供了增量备份方案其原理是通过记录每页最后的checkpoint lsn如果大于之前全量备份时的lsn那么就对该页进行备份否则无需备份该页。
### 数据一致性
在进行数据备份时,`要求数据在备份时是一致的`。例如在玩家购买道具时,其会先扣款并对道具进行增加,如果数据不一致,那么则可能发生扣款已经发生但是道具尚未被添加这类数据不一致的情况。
对于innodb而言由于其支持mvcc故而对保证数据一致性的备份实现比较简单。在备份时可以先开启一个事务然后导出一系列相关的表然后提交。由于undo log和read view的设计可以保证事务中读取到的数据是一致的。
对于mysqldump工具而言可以通过添加`--single-transaction`选项来获取innodb的一致性备份原理和上述所示的相同备份逻辑会在一个长事务中执行。`在使用mysqldump进行备份时务必添加--single-transaction选项`