7.2 数据库备份方法

本节总结了一些进行备份的常规方法。

使用 MySQL Enterprise Backup 进行热备份

MySQL 企业版的 Client 可以使用MySQL 企业备份产品对整个实例或所选数据库,table 或两者进行physical备份。该产品包含incrementalcompressed备份的功能。备份物理数据库文件使恢复比逻辑技术(例如mysqldump命令)快得多。 InnoDBtable 是使用hot backup机制复制的。 (理想情况下,InnoDBtable 应代 table 大部分数据.)使用warm backup机制复制其他存储引擎的 table。有关 MySQL 企业备份产品的概述,请参见第 29.2 节“ MySQL 企业备份概述”

使用 mysqldump 进行备份

mysqldump程序可以进行备份。它可以备份各种 table。 (请参阅第 7.4 节“使用 mysqldump 进行备份”。)

对于InnoDBtable,可以使用mysqldump--single-transaction选项执行不对 table 进行任何锁定的在线备份。参见第 7.3.1 节“构建备份策略”

通过复制 table 文件进行备份

对于使用自己的文件 table 示每个 table 的存储引擎,可以通过复制这些文件来备份 table。例如,MyISAMtable 存储为文件,因此通过复制文件(*.frm*.MYD*.MYI文件)很容易进行备份。要获得一致的备份,请停止服务器或锁定并刷新相关 table:

FLUSH TABLES tbl_list WITH READ LOCK;

您只需要一个读锁;这样,当您在数据库目录中复制文件时,其他 Client 端就可以 continue 查询 table。需要刷新才能确保在开始备份之前将所有活动索引页都写入磁盘。参见第 13.3.5 节“ LOCK TABLES 和 UNLOCK TABLES 语句”第 13.7.6.3 节“ FLUSH 语句”

您还可以仅通过复制所有 table 文件来创建二进制备份,只要服务器不更新任何内容即可。 (但是请注意,如果您的数据库包含InnoDB个 table,则 table 文件复制方法不起作用.而且,即使服务器未在主动更新数据,InnoDB仍可能会修改已缓存在内存中的数据,并且不会刷新到磁盘.)

备份分隔文本文件

要创建包含 table 数据的文本文件,可以使用SELECT * INTO OUTFILE'file_name'从 tbl_name。该文件是在 MySQL 服务器主机而非 Client 端主机上创建的。对于此语句,输出文件不能已经存在,因为允许文件被覆盖会构成安全风险。参见第 13.2.9 节“ SELECT 语句”。此方法适用于任何类型的数据文件,但仅保存 table 数据,而不保存 table 结构。

创建文本数据文件(以及包含备份 table 的CREATE TABLE语句的文件)的另一种方法是将mysqldump--tab选项一起使用。参见第 7.4.3 节“使用 mysqldump 转储定界文本格式的数据”

要重新加载带分隔符的文本数据文件,请使用LOAD DATAmysqlimport

通过启用二进制日志进行增量备份

MySQL 支持增量备份:必须使用--log-bin选项启动服务器才能启用二进制日志记录;参见第 5.4.4 节“二进制日志”。二进制日志文件为您提供了将更改复制到数据库的信息,这些更改是在执行备份之后进行的。当前要进行增量备份(包含自上次完全备份或增量备份以来发生的所有更改),应使用FLUSH LOGS旋转二进制日志。完成此操作后,您需要将所有二进制日志复制到备份位置,范围从上次完全备份或增量备份的那一刻到最后一次备份。这些二进制日志是增量备份。在还原时,按照第 7.5 节“时间点(增量)恢复”中的说明应用它们。下次进行完全备份时,还应该使用FLUSH LOGSmysqldump --flush-logs旋转二进制日志。参见第 4.5.4 节“ mysqldump-数据库备份程序”

使用复制从站进行备份

如果在进行备份时主服务器出现性能问题,则可以帮助您解决问题的一种策略是在从服务器(而不是主服务器)上设置复制并执行备份。参见第 16.3.1 节“使用复制进行备份”

如果要备份从属复制服务器,则在备份从属数据库时,无论选择哪种备份方法,都应备份其主信息并中继日志信息存储库(请参见第 16.2.4 节“中继日志和复制应用程序元数据存储库”)。恢复从站的数据后,始终需要这些信息文件来恢复复制。如果从属服务器正在复制LOAD DATA语句,则还应备份该从属服务器用于此目的的目录中存在的任何SQL_LOAD-*文件。从站需要这些文件来恢复任何已中断的LOAD DATA操作的复制。该目录的位置是slave_load_tmpdir系统变量的值。如果未使用该变量集启动服务器,则目录位置是tmpdir系统变量的值。

恢复损坏的 table

如果必须恢复已损坏的MyISAMtable,请尝试首先使用REPAIR TABLEmyisamchk -r恢复它们。这应该在所有情况下的 99.9%中起作用。如果myisamchk失败,请参见第 7.6 节“ MyISAMtable 维护和崩溃恢复”

使用文件系统快照进行备份

如果使用的是 Veritas 文件系统,则可以进行如下备份:

  • 在 Client 端程序中,执行带读取锁的平桌子

  • 从另一个 Shell 执行mount vxfs snapshot

  • 从第一个 Client 端执行UNLOCK TABLES

  • 从快照复制文件。

  • 卸载快照。

类似的快照功能可能在其他文件系统(例如 LVM 或 ZFS)中可用。