7.2 数据库备份方法
本节总结了一些进行备份的常规方法。
使用 MySQL Enterprise Backup 进行热备份
MySQL 企业版的 Client 可以使用MySQL 企业备份产品对整个实例或所选数据库,table 或两者进行physical备份。该产品包含incremental和compressed备份的功能。备份物理数据库文件使恢复比逻辑技术(例如mysqldump
命令)快得多。 InnoDB
table 是使用hot backup机制复制的。 (理想情况下,InnoDB
table 应代 table 大部分数据.)使用warm backup机制复制其他存储引擎的 table。有关 MySQL 企业备份产品的概述,请参见第 29.2 节“ MySQL 企业备份概述”。
使用 mysqldump 进行备份
mysqldump程序可以进行备份。它可以备份各种 table。 (请参阅第 7.4 节“使用 mysqldump 进行备份”。)
对于InnoDB
table,可以使用mysqldump的--single-transaction选项执行不对 table 进行任何锁定的在线备份。参见第 7.3.1 节“构建备份策略”。
通过复制 table 文件进行备份
对于使用自己的文件 table 示每个 table 的存储引擎,可以通过复制这些文件来备份 table。例如,MyISAM
table 存储为文件,因此通过复制文件(*.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 DATA或mysqlimport。
通过启用二进制日志进行增量备份
MySQL 支持增量备份:必须使用--log-bin选项启动服务器才能启用二进制日志记录;参见第 5.4.4 节“二进制日志”。二进制日志文件为您提供了将更改复制到数据库的信息,这些更改是在执行备份之后进行的。当前要进行增量备份(包含自上次完全备份或增量备份以来发生的所有更改),应使用FLUSH LOGS旋转二进制日志。完成此操作后,您需要将所有二进制日志复制到备份位置,范围从上次完全备份或增量备份的那一刻到最后一次备份。这些二进制日志是增量备份。在还原时,按照第 7.5 节“时间点(增量)恢复”中的说明应用它们。下次进行完全备份时,还应该使用FLUSH LOGS或mysqldump --flush-logs旋转二进制日志。参见第 4.5.4 节“ mysqldump-数据库备份程序”。
使用复制从站进行备份
如果在进行备份时主服务器出现性能问题,则可以帮助您解决问题的一种策略是在从服务器(而不是主服务器)上设置复制并执行备份。参见第 16.3.1 节“使用复制进行备份”。
如果要备份从属复制服务器,则在备份从属数据库时,无论选择哪种备份方法,都应备份其主信息并中继日志信息存储库(请参见第 16.2.4 节“中继日志和复制应用程序元数据存储库”)。恢复从站的数据后,始终需要这些信息文件来恢复复制。如果从属服务器正在复制LOAD DATA语句,则还应备份该从属服务器用于此目的的目录中存在的任何SQL_LOAD-*
文件。从站需要这些文件来恢复任何已中断的LOAD DATA操作的复制。该目录的位置是slave_load_tmpdir系统变量的值。如果未使用该变量集启动服务器,则目录位置是tmpdir系统变量的值。
恢复损坏的 table
如果必须恢复已损坏的MyISAM
table,请尝试首先使用REPAIR TABLE或myisamchk -r恢复它们。这应该在所有情况下的 99.9%中起作用。如果myisamchk失败,请参见第 7.6 节“ MyISAMtable 维护和崩溃恢复”。
使用文件系统快照进行备份
如果使用的是 Veritas 文件系统,则可以进行如下备份:
-
在 Client 端程序中,执行带读取锁的平桌子。
-
从另一个 Shell 执行
mount vxfs snapshot
。 -
从第一个 Client 端执行UNLOCK TABLES。
-
从快照复制文件。
-
卸载快照。
类似的快照功能可能在其他文件系统(例如 LVM 或 ZFS)中可用。