9.2 数据库备份方法
本节总结了一些常见的备份方法。
MySQL Enterprise Edition 的客户可以使用MySQL Enterprise Backup产品对整个实例、选定的数据库、表或两者进行物理备份。该产品包括增量备份和压缩备份的功能。备份物理数据库文件比逻辑技术,如mysqldump
命令,恢复速度更快。InnoDB
表使用热备份机制复制。理想情况下,InnoDB
表应该占据数据的多数部分。其他存储引擎的表使用温备份机制复制。关于 MySQL Enterprise Backup 产品的概述,请参阅第32.1节,“MySQL Enterprise Backup Overview”。
mysqldump程序可以进行备份。它可以备份所有类型的表。请参阅第9.4节,“使用 mysqldump 进行备份”。
对于 InnoDB
表,可以使用--single-transaction
选项来执行不锁定表的在线备份,查看第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节,“刷新语句”.
您也可以简单地通过复制表文件来创建二进制备份,只要服务器不在更新数据。(但是,注意,如果您的数据库包含 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 将数据dump到文本格式”。
要重新加载分隔文本数据文件,使用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节,“Relay Log and Replication Metadata Repositories”LOAD DATA
语句,您也应该备份该副本用于这个目的的目录中的任何SQL_LOAD-*
文件。副本需要这些文件恢复中断的LOAD DATA
操作的位置,这个目录的位置是系统变量replica_load_tmpdir
的值。如果服务器没有使用该变量启动,目录的位置是系统变量tmpdir
的值。
Recovering Corrupt 表
如果您需要恢复已经损坏的 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,也可能提供类似的快照功能。