在您的备份策略中,性能和存储空间是关键方面。您希望备份快速完成,数据库服务器的 CPU 开销很小。您还希望备份数据紧凑,这样您就可以在手边保留多个备份,以便随时恢复。将备份数据传输到不同的系统应该既快捷又方便。所有这些方面都由mysqlbackup 命令的选项控制。
有时您必须平衡不同类型的开销——CPU 周期、存储空间和网络流量。始终了解在计划维护期间或灾难发生时恢复数据需要多少时间。例如,以下是一些关键的 MySQL Enterprise Backup 功能需要考虑的因素:
并行备份 是 MySQL Enterprise Backup 3.8 中的默认设置,这是对早期 MySQL Enterprise Backup 版本的重大性能改进。读取、处理和写入是所有 MEB 操作的主要子操作。例如,在备份操作中,MySQL Enterprise Backup首先从磁盘读取数据,然后处理这些数据,将数据写入磁盘,然后再次读取数据进行验证。MySQL Enterprise Backup 确保这些子操作相互独立并并行运行以获得性能提升。读取、处理和写入子操作使用多个同类线程并行执行:多个读取线程、多个处理线程和多个写入线程,从而获得更好的性能。当 RAID 阵列同时用作源设备和目标设备时,以及用于可以并行使用更多 CPU 周期的压缩备份时,性能改进通常会更大。
并行备份采用块级并行,使用 16MB 的块。不同的线程可以在单个文件中读取、处理和写入不同的 16MB 块。并行备份提高了操作的性能,无论实例包含一个巨大的 系统表空间,还是许多较小的表空间(由在该
innodb_file_per_table
模式下创建的 .ibd 文件表示)。增量备份比完全备份更快,节省了数据库服务器上的存储空间,也节省了将备份数据转移到不同服务器上的网络流量。增量备份需要额外的处理才能使备份准备好恢复,您可以在不同的系统上执行此操作以最大限度地减少数据库服务器上的 CPU 开销。
压缩备份可以节省 InnoDB 表的存储空间,以及将备份数据传输到不同服务器的网络流量。它们确实比未压缩的备份强加了更多的 CPU 开销。在还原过程中,您同时需要压缩和未压缩的数据,因此请考虑这个额外的存储空间和解压缩数据的时间。
除了压缩 InnoDB 表中的数据外,压缩备份还会跳过 InnoDB 表空间文件中未使用的空间。未压缩的备份包括这个未使用的空间。
当空间有限,或者你有像磁带这样便宜、大但速度慢的存储设备时,性能和空间的考虑是不同的。您不想以尽可能快的备份为目标,而是希望避免在数据库服务器上存储备份数据的中间副本。MySQL Enterprise Backup 可以生成单个文件备份并将该文件直接流式传输到其他服务器或设备。由于备份数据永远不会保存到本地系统,因此可以避免数据库服务器上的空间开销。您还可以避免保存一组备份文件然后将它们捆绑到存档中以传输到另一台服务器或存储设备的性能开销。有关详细信息,请参阅 第 4.3.5.1 节,“将备份数据流式传输到另一个设备或服务器”。
将备份数据流式传输到磁带时,通常不压缩备份,因为数据库服务器上执行压缩的 CPU 开销比磁带设备上的额外存储空间更昂贵。将备份数据流式传输到另一台服务器时,您可能会在原始服务器或目标服务器上进行压缩,具体取决于哪个服务器具有更多空闲 CPU 容量以及压缩可以节省多少网络流量。或者,您可以将未压缩的备份数据保留在目标服务器上,以便可以在短时间内恢复。
对于灾难恢复,当恢复数据的速度至关重要时,您可能更愿意准备好关键备份数据并解压缩,以便恢复操作涉及的步骤尽可能少。
在灾难恢复期间,速度最为关键。例如,虽然使用mysqldump命令执行的逻辑备份可能与物理备份(至少对于小型数据库)
花费的时间大致相同
,但 MySQL Enterprise Backup 恢复操作通常更快。将实际数据文件复制回数据目录会跳过插入行和更新索引的开销,这些开销来自从
输出中重放 SQL 语句。
mysqldump
posix_fadvise()
为了尽量减少对 Linux 和 Unix 系统上服务器性能的影响,MySQL Enterprise Backup 通过使用系统调用
写入备份数据而不将其存储在操作系统的磁盘缓存中
。这种技术通过防止频繁访问的数据被备份数据的大型一次性读取操作从磁盘缓存中清除,从而最大限度地减少了备份操作后的任何减速。
有关涉及备份和恢复性能的技术和权衡的更多信息,请参阅第 7 章,MySQL 企业备份的性能注意事项。