本节概述了一些常用的备份方法。
使用 MySQL Enterprise Backup 进行热备份
MySQL 企业版的客户可以使用 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 节,“建立备份策略”。
通过复制表文件进行备份
可以通过复制表文件(*.MYD
、*.MYI
文件和相关的 *.sdi
文件)来备份 MyISAM 表。要获得一致的备份,请停止服务器或锁定并刷新相关表
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 语句”。此方法适用于任何类型的数据文件,但仅保存表数据,而不保存表结构。file_name
' FROM tbl_name
另一种创建文本数据文件(以及包含已备份表的 CREATE TABLE
语句的文件)的方法是将 mysqldump 与 --tab
选项一起使用。请参阅 第 9.4.3 节,“使用 mysqldump 以分隔文本格式转储数据”。
要重新加载分隔文本数据文件,请使用 LOAD DATA
或 mysqlimport。
通过启用二进制日志进行增量备份
MySQL 使用二进制日志支持增量备份。二进制日志文件为您提供复制自上次执行备份后对数据库所做的更改所需的信息。因此,为了允许将服务器还原到某个时间点,必须在其上启用二进制日志记录,这是 MySQL 8.4 的默认设置;请参阅 第 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)中可能也提供类似的快照功能。