本节总结了一些常见的数据库备份方法。
使用 MySQL Enterprise Backup 进行热备份
MySQL Enterprise Edition 的客户可以使用 MySQL Enterprise Backup 产品来对整个实例或选择的数据库、表进行 物理 备份。该产品包括 增量 和 压缩备份 功能。备份物理数据库文件可以使恢复速度比逻辑技术(如 mysqldump
命令)快得多。InnoDB
表使用 热备份 机制进行备份。(理想情况下,InnoDB
表应该占据大部分数据。)其他存储引擎的表使用 温备份 机制。有关 MySQL Enterprise Backup 产品的概述,请参见 第 32.1 节,“MySQL Enterprise Backup 概述”。
使用 mysqldump 进行备份
mysqldump 程序可以进行备份。它可以备份所有类型的表。(参见 第 9.4 节,“使用 mysqldump 进行备份”。)
对于 InnoDB
表,可以使用 --single-transaction
选项来 mysqldump 在线备份表,而不锁定表。请参见 第 9.3.1 节,“建立备份策略”。
通过复制表文件进行备份
MyISAM 表可以通过复制表文件(*.MYD
、*.MYI
文件和相关的 *.sdi
文件)来备份。要获取一致的备份,需要停止服务器或锁定和刷新相关表:
FLUSH TABLES tbl_list WITH READ LOCK;
您只需要读锁;这允许其他客户端继续查询表,而您正在复制数据库目录中的文件。刷新是必要的,以确保所有活动索引页被写入磁盘之前备份。请参见 第 15.3.6 节,“LOCK TABLES 和 UNLOCK TABLES 语句” 和 第 15.7.8.3 节,“FLUSH 语句”。
您也可以通过简单地复制表文件来创建二进制备份,只要服务器不更新任何内容。(但请注意,如果您的数据库包含 InnoDB
表,则表文件复制方法不起作用。此外,即使服务器不活动更新数据, InnoDB
也可能在内存中缓存修改的数据,而不将其刷新到磁盘。)
有关此备份方法的示例,请参阅 第 15.2.6 节,“IMPORT TABLE 语句” 中的导出和导入示例。
创建分隔文本文件备份
要创建包含表数据的文本文件,可以使用 SELECT * INTO OUTFILE '
。该文件是在 MySQL 服务器主机上创建的,而不是客户端主机上。对于该语句,输出文件不能已经存在,因为允许文件被覆盖构成了安全风险。请参阅 第 15.2.13 节,“SELECT 语句”。这种方法适用于任何类型的数据文件,但只保存表数据,而不保存表结构。文件名
' FROM 表名
另一种创建文本数据文件(以及包含 CREATE TABLE
语句的备份表)的方法是使用 mysqldump 带有 --tab
选项。请参阅 第 9.4.3 节,“使用 mysqldump 转储分隔文本格式数据”。
要重新加载分隔文本数据文件,请使用 LOAD DATA
或 mysqlimport。
启用二进制日志以进行增量备份
MySQL 支持使用二进制日志进行增量备份。二进制日志文件提供了您需要的信息,以便在执行备份后对数据库进行更改。因此,要允许服务器恢复到某个时间点,必须在服务器上启用二进制日志记录,默认情况下,MySQL 8.3 已经启用了该功能;请参阅 第 7.4.4 节,“二进制日志”。
当前,您想创建增量备份(包含自上次完整或增量备份以来的所有更改),您应该使用 FLUSH LOGS
旋转二进制日志。完成后,您需要将从上次完整或增量备份时的二进制日志到最后一个的所有二进制日志复制到备份位置。这些二进制日志是增量备份;在恢复时,您可以按照 第 9.5 节,“点时恢复(增量恢复)” 中所述应用它们。下次您执行完整备份时,您也应该使用 FLUSH LOGS
或 mysqldump --flush-logs 旋转二进制日志。请参阅 第 6.5.4 节,“mysqldump — 数据库备份程序”。
使用副本创建备份
如果服务器在创建备份时出现性能问题,一种有助于解决问题的策略是设置复制并在副本上执行备份,而不是在源服务器上。请参阅 第 19.4.1 节,“使用复制进行备份”。
如果您正在备份副本,您应该在备份副本的数据库时备份其连接元数据存储库和应用元数据存储库(请参阅 第 19.2.4 节,“中继日志和复制元数据存储库”),无论您选择哪种备份方法。这信息总是需要恢复副本的数据后恢复复制。如果您的副本正在复制 LOAD DATA
语句,您还应该备份任何存在于副本用于此目的的目录中的 SQL_LOAD-*
文件。副本需要这些文件来恢复任何中断的 LOAD DATA
操作。该目录的位置是系统变量 replica_load_tmpdir
的值。如果服务器没有使用该变量启动,目录的位置是系统变量 tmpdir
的值。
恢复损坏的表
如果您需要恢复 MyISAM
表格,因为它们变得损坏,请尝试使用 REPAIR TABLE
或 myisamchk -r 首先。这应该在 99.9% 的情况下生效。如果 myisamchk 失败,请参阅 第 9.6 节,“MyISAM 表维护和崩溃恢复”。
使用文件系统快照创建备份
如果您使用 Veritas 文件系统,可以按照以下步骤创建备份:
-
从客户端程序中,执行
FLUSH TABLES WITH READ LOCK
。 -
从另一个 shell 中,执行
mount vxfs snapshot
。 -
从第一个客户端中,执行
UNLOCK TABLES
。 -
从快照中复制文件。
-
卸载快照。
其他文件系统,例如 LVM 或 ZFS,也可能提供类似的快照功能。