15、备份与恢复

为什么要备份

  1. 灾难恢复

灾难恢复时下列场景需要做的事:硬件故障,一个不经意的bug导致数据损坏,或者服务器及其数据由于某些原因不可获取或无法使用。

  1. 人们改变想法

我们经常会在删除某些数据后又想恢复这些数据。

  1. 审计

有时候需要知道数据或 schema 在过去的某个时间点是什么样的。

  1. 测试

一个最简单的基于实际数据来测试的方法就是,定期用最新的生产环境数据更新测试服务器。

定义恢复需求

让备份系统平滑工作比构造良好的恢复过程和工具更容易:

  1. 备份在先,只有已经做了备份才可能恢复。
  2. 备份由脚本和任务自动完成。
  3. 备份是日常任务,但是恢复常常发生在危急情况下。
  4. 因为安全的需要,如果正在做异地备份,可能需要对备份数据进行加密或采取其他措施来保护。
  5. 只有一个人来规划、设计和实施备份。

规划备份和恢复策略时,有两个重要的需求可以帮忙思考:恢复点目标和恢复时间目标。他们定义了可以容忍丢失多少数据,以及需要等待多久将数据恢复。

设计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导出文件,符号分隔文件要更紧凑且易于用命令行工具操作。最大的优点是备份和还原速度更快。

文件系统快照

文件系统快照是一种非常好的在线备份方法。支持快照的文件系统能够瞬间创建用来备份的内容一致的镜像。

从备份中恢复

如何恢复数据取决于是怎么备份的。以下是恢复的步骤:

  1. 停止Mysql服务器
  2. 记录服务器的配置和文件权限
  3. 将数据从备份中移动到Mysql数据目录
  4. 改变配置
  5. 改变文件权限
  6. 以限制访问模式重启服务器,等待完成启动
  7. 载入逻辑备份文件
  8. 检查和重放二进制日志
  9. 检测已经还原的数据
  10. 以完全权限重启服务器

备份和恢复工具

  • Mysql Enterprise Backup
  • Percona Xtra Backup
  • mylvmbackup
  • Zmanda Recovery Manager
  • mydumper
  • mysqldump

你可能感兴趣的:(Mysql高性能学习,面试,java,后端,mysql,数据库)