为什么要备份
- 灾难恢复
灾难恢复时下列场景需要做的事:硬件故障,一个不经意的bug导致数据损坏,或者服务器及其数据由于某些原因不可获取或无法使用。
- 人们改变想法
我们经常会在删除某些数据后又想恢复这些数据。
- 审计
有时候需要知道数据或 schema 在过去的某个时间点是什么样的。
- 测试
一个最简单的基于实际数据来测试的方法就是,定期用最新的生产环境数据更新测试服务器。
定义恢复需求
让备份系统平滑工作比构造良好的恢复过程和工具更容易:
- 备份在先,只有已经做了备份才可能恢复。
- 备份由脚本和任务自动完成。
- 备份是日常任务,但是恢复常常发生在危急情况下。
- 因为安全的需要,如果正在做异地备份,可能需要对备份数据进行加密或采取其他措施来保护。
- 只有一个人来规划、设计和实施备份。
规划备份和恢复策略时,有两个重要的需求可以帮忙思考:恢复点目标和恢复时间目标。他们定义了可以容忍丢失多少数据,以及需要等待多久将数据恢复。
设计Mysql备份方案
在线备份还是离线备份
如果可能,关闭Mysql做备份是最简单最安全的,也是所有获取一致性副本的方法中最好的,而且损坏或不一致的风险最小。如果关闭Mysql,就不需要关心InnoDB缓冲池中的脏页或其他缓存。也不需要担心数据在尝试备份的过程被修改,并且因为服务器不对应用提供访问,所以可以更快地完成备份。
在规划备份时,有一些与性能有关的因素:
- 锁时间
- 备份时间
- 备份负载
- 恢复时间
逻辑备份还是物理备份
有两个方法来备份Mysql数据:逻辑备份和直接复制原始文件的物理备份。逻辑备份将数据包含在一种Mysql能够解析的格式中,要么是SQL,要么是以某个符号分隔的文本。原始文件是指存在于硬盘上的文件。
逻辑备份
优点
- 逻辑备份是可以用编辑器或像 grep 和 sed 之类的命令查看和操作的普通文件。
- 恢复非常简单。
- 可以通过网络来备份和恢复。
- 可以在类似 Amazon RDS 这样不能访问底层文件系统的系统中使用。
- 非常灵活。
- 与存储引擎无关。
- 有助于避免数据损坏。
缺点
- 必须有数据库服务器完成生成逻辑备份的工作,因此需要使用更多的CPU周期。
- 逻辑备份在某些场景下比数据库文件本身更大。
- 无法保证导出后再还原出来的一定是同样的数据。
- 从逻辑备份中还原需要Mysql加载和解释语句,转化为存储格式。
物理备份
优点
- 基于文件的物理备份,只需要将需要的文件复制到其他地方即可完成备份。
- 物理备份的恢复更简单,取决于存储引擎。对于MyISAM,只需要简单地复制文件到目的地即可。对于InnoDB,则需要停止数据库服务,可能还要采取其他措施。
- InnoDB和MyISAM的物理备份非常容易跨平台、操作系统和Mysql版本。
- 从物理备份中恢复会更快,因为Mysql服务器不需要执行任务SQL或构建索引。
缺点
- InnoDB的原始文件通常比相应的逻辑备份要大得多。
- 物理备份不总是可以跨平台、操作系统以及Mysql版本。文件名大小写敏感和浮点格式可能存在问题。
建议混合使用物理和逻辑两种方式来备份:先使用物理复制,以此数据启动Mysql服务器实例并运行mysqlcheck。然后周期性地使用 mysqldump 执行逻辑备份。
备份是什么
以下是Mysql备份需要考虑的几点
- 非显著数据:例如二进制日志和InnoDB事务日志。
- 代码:例如触发器和存储过程。
- 复制配置
- 服务器配置
- 选定的操作系统文件
增量备份和差异备份
当数据量很庞大的时候,一个常见的策略是做定期的增量或差异备份。
差异备份是对自上次全备份后所有改变的部分而做的备份。
增量备份是自从任意类型的上次备份后所有修改做的备份。
存储引擎和一致性
数据一致性
当备份时,应该考虑是否需要数据在指定的时间点一致。
文件一致性
复制
从备库中备份最大的好处就是不干扰主库,避免在主库上增加额外的负载。
管理和备份二进制日志
服务器的二进制日志是备份的最重要因素之一。他们对于基于时间点的恢复是必需的,并且通常比数据更小,所以更容易进行频繁的备份。
二进制日志格式
二进制日志包含一系列的事件。每个事件有一个固定长度的头,其中有各种信息,例如当前时间戳和默认的数据库。
安全地清除老的二进制日志
需要决定日志的过期策略以防止磁盘被二进制日志写满。日志增长多大取决于负载和日志格式。如果可能,只要日志有用就尽可能保留。保留日志对于设置复制、分析服务器负载、审计和从上次全备按时间点进行恢复都有帮助。
备份数据
生成逻辑备份
SQL导出
导出文件包含表结构和数据,均以有效的SQL命令形式写出。
主要有以下几个问题:
1. schema和数据存储在一起
2. 巨大的SQL语句
3. 单个巨大的文件
4. 逻辑备份的成本很高
符号分隔文件
可以使用SQL命令 SELECT INTO OUTFILE 以符号分隔文件格式创建数据的逻辑备份。比起SQL导出文件,符号分隔文件要更紧凑且易于用命令行工具操作。最大的优点是备份和还原速度更快。
文件系统快照
文件系统快照是一种非常好的在线备份方法。支持快照的文件系统能够瞬间创建用来备份的内容一致的镜像。
从备份中恢复
如何恢复数据取决于是怎么备份的。以下是恢复的步骤:
- 停止Mysql服务器
- 记录服务器的配置和文件权限
- 将数据从备份中移动到Mysql数据目录
- 改变配置
- 改变文件权限
- 以限制访问模式重启服务器,等待完成启动
- 载入逻辑备份文件
- 检查和重放二进制日志
- 检测已经还原的数据
- 以完全权限重启服务器
备份和恢复工具
- Mysql Enterprise Backup
- Percona Xtra Backup
- mylvmbackup
- Zmanda Recovery Manager
- mydumper
- mysqldump