数据库备份方式
备份和恢复类型
本节介绍了不同类型的备份的特征。
物理(原始)与逻辑备份
物理备份由存储数据库内容的目录和文件的原始副本组成。这种类型的备份适用于大型的重要数据库,这些数据库在出现问题时需要快速恢复。
逻辑备份保存表示为逻辑数据库结构(CREATE DATABASE
,CREATE TABLE
语句)和内容(INSERT
语句或定界文本文件)的信息。这种类型的备份适用于少量数据,您可以在其中编辑数据值或表结构,或在其他计算机体系结构上重新创建数据。
物理备份方法具有以下特征:
- 备份由数据库目录和文件的精确副本组成。通常,这是全部或部分MySQL数据目录的副本。
- 物理备份方法比逻辑备份方法快,因为它们仅涉及文件复制而不进行转换。
- 输出比逻辑备份更紧凑。
- 由于备份速度和紧凑性对于繁忙,重要的数据库很重要,因此MySQL Enterprise Backup产品执行物理备份。有关MySQL企业备份产品的概述,请参见“ MySQL企业备份概述”。
- 备份和还原的粒度范围从整个数据目录级别到单个文件级别。这可能会或可能不会提供表级粒度,具体取决于存储引擎。例如,
InnoDB
每个表可以位于单独的文件中,或与其他InnoDB
表共享文件存储;例如,每个MyISAM
表唯一地对应于一组文件。 - 除了数据库之外,备份还可以包括任何相关文件,例如日志或配置文件。
MEMORY
表中的数据很难以这种方式进行备份,因为它们的内容未存储在磁盘上。(MySQL Enterprise Backup产品具有一项功能,您可以MEMORY
在备份期间从表中检索数据。)- 备份只能移植到具有相同或相似硬件特性的其他计算机上。
- 可以在MySQL服务器未运行时执行备份。如果服务器正在运行,则必须执行适当的锁定,以便服务器在备份期间不会更改数据库内容。MySQL Enterprise Backup自动为需要锁定的表执行此锁定。
- 物理备份工具包括MySQL Enterprise Backup for 或任何其他表的mysqlbackup,
InnoDB
或表的文件系统级命令(例如cp,scp,tar,rsync)MyISAM
。 恢复:
- MySQL Enterprise Backup还原
InnoDB
和备份的其他表。 - ndb_restore还原
NDB
表。 - 可以使用文件系统命令将在文件系统级别复制的文件复制回其原始位置。
- MySQL Enterprise Backup还原
逻辑备份方法具有以下特征:
- 通过查询MySQL服务器以获得数据库结构和内容信息来完成备份。
- 备份比物理方法慢,因为服务器必须访问数据库信息并将其转换为逻辑格式。如果输出是在客户端编写的,则服务器还必须将其发送到备份程序。
- 输出大于物理备份的输出,尤其是以文本格式保存时。
- 备份和还原粒度在服务器级别(所有数据库),数据库级别(特定数据库中的所有表)或表级别可用。无论存储引擎如何,都是如此。
- 备份不包括日志或配置文件,或者不属于数据库的其他与数据库相关的文件。
- 以逻辑格式存储的备份与计算机无关并且具有高度的可移植性。
- 逻辑备份是在MySQL服务器运行的情况下执行的。服务器未脱机。
- 逻辑备份工具包括mysqldump程序和
SELECT ... INTO OUTFILE
语句。这些适用于任何存储引擎,甚至MEMORY
。 - 要恢复逻辑备份,可以使用mysql客户端处理SQL格式的转储文件。要加载带分隔符的文本文件,请使用
LOAD DATA
语句或mysqlimport客户端。
联机与脱机备份
在线备份在MySQL服务器运行时进行,以便可以从服务器获取数据库信息。停止服务器时,将进行脱机备份。这种区别也可以描述为“热”与“冷”备份。一个“温暖”的备份是一个在服务器保持运行,但锁定,以防止当你从外部访问数据库文件修改数据。
联机备份方法具有以下特征:
- 备份对其他客户端的干扰较小,其他客户端可以在备份期间连接到MySQL服务器,并且可以根据其需要执行的操作来访问数据。
- 必须注意施加适当的锁定,以免发生会损害备份完整性的数据修改。MySQL Enterprise Backup产品会自动执行这种锁定。
脱机备份方法具有以下特征:
- 客户端可能会受到不利影响,因为服务器在备份过程中不可用。因此,此类备份通常是从复制从属服务器获取的,该复制从属服务器可以脱机使用而不会损害可用性。
- 备份过程更简单,因为不可能受到客户端活动的干扰。
在线和离线之间的相似区别适用于恢复操作,并且相似的特征适用。但是,与联机备份相比,联机恢复对客户端的影响更大,因为恢复需要更强的锁定。在备份期间,客户端可能能够在备份数据时读取数据。恢复会修改数据,而不仅仅是读取数据,因此必须防止客户端在还原数据时访问数据。
本地与远程备份
本地备份是在运行MySQL服务器的同一主机上执行的,而远程备份是从其他主机执行的。对于某些类型的备份,即使输出是本地写在服务器上,也可以从远程主机启动备份。主办。
- mysqldump可以连接到本地或远程服务器。对于SQL输出(
CREATE
和INSERT
语句),可以完成本地或远程转储并在客户端上生成输出。对于带分隔符的文本输出(带有该--tab
选项),将在服务器主机上创建数据文件。 SELECT ... INTO OUTFILE
可以从本地或远程客户端主机启动,但是输出文件在服务器主机上创建。- 物理备份方法通常在MySQL服务器主机上本地启动,以便使服务器脱机,尽管复制文件的目的地可能是远程的。
快照备份
一些文件系统实现使“快照”得以拍摄。它们在给定的时间点提供文件系统的逻辑副本,而无需整个文件系统的物理副本。(例如,该实现可以使用写时复制技术,以便仅复制在快照时间之后修改的文件系统的一部分。)MySQL本身不提供获取文件系统快照的功能。它可以通过Veritas,LVM或ZFS等第三方解决方案获得。
完整备份与增量备份
完全备份包括在给定时间点由MySQL服务器管理的所有数据。增量备份包括在给定时间段(从一个时间点到另一个时间点)内对数据所做的更改。MySQL有执行完全备份的不同方法,如本节前面所述。通过启用服务器的二进制日志(服务器用于记录数据更改),可以进行增量备份。
完全与时间点(增量)恢复
完全恢复可从完全备份中还原所有数据。这会将服务器实例还原到进行备份时的状态。如果该状态不是最新状态,则可以执行完全恢复,然后恢复自完全备份以来进行的增量备份,以使服务器处于最新状态。
增量恢复是指在给定时间范围内所做的更改的恢复。这也称为时间点恢复,因为它使服务器的状态在给定时间之前为当前状态。时间点恢复基于二进制日志,通常会从备份文件进行完全恢复,从而将服务器恢复到进行备份时的状态。然后,将写入二进制日志文件中的数据更改作为增量恢复应用到重做数据修改,并使服务器达到所需的时间点。
表维护
如果表损坏,数据完整性可能会受到损害。对于InnoDB
表,这不是一个典型的问题。有关检查MyISAM
表并在发现问题时进行修复的程序,请参见“ MyISAM表维护和崩溃恢复”。
备份调度,压缩和加密
备份计划对于自动执行备份过程非常重要。压缩备份输出可减少空间需求,并且输出的加密可提供更好的安全性,以防止未经授权访问备份数据。MySQL本身不提供这些功能。MySQL Enterprise Backup产品可以压缩InnoDB
备份,并且可以使用文件系统实用程序来对备份输出进行压缩或加密。其他第三方解决方案也可能可用。
数据库备份方式
本节总结了一些进行备份的常规方法。
使用MySQL Enterprise Backup进行热备份
MySQL企业版的客户可以使用 MySQL企业备份产品对整个实例或选定的数据库,表或两者进行物理备份。该产品包括增量备份和压缩备份的功能。备份物理数据库文件使恢复比逻辑技术(如mysqldump
命令)快得多。InnoDB
使用热备份机制复制表。(理想情况下,这些InnoDB
表应代表大部分数据。)使用热备份从其他存储引擎复制表机制。有关MySQL企业备份产品的概述,请参见“ MySQL企业备份概述”。
使用mysqldump进行备份
该mysqldump的程序可以进行备份。它可以备份各种表。(请参见“使用mysqldump进行备份”。)
对于InnoDB
表,可以使用mysqldump--single-transaction
选项执行不对表进行任何锁定的在线备份。请参见“示例备份和恢复策略”。
通过复制表文件进行备份
可以通过复制表文件(*.MYD
,*.MYI
文件和关联*.sdi
文件)来备份MyISAM表。要获得一致的备份,请停止服务器或锁定并刷新相关表:
FLUSH TABLES tbl_listWITH READ LOCK ;
您只需要一个读锁;这样,当您在数据库目录中复制文件时,其他客户端就可以继续查询表。需要刷新才能确保在开始备份之前将所有活动索引页都写入磁盘。请参见“ LOCK TABLES和UNLOCK TABLES语句”和“ FLUSH语句”。
只要服务器不进行任何更新,您还可以仅通过复制表文件来创建二进制备份。(但是请注意,如果您的数据库包含InnoDB
表,则表文件复制方法不起作用。而且,即使服务器未在主动更新数据,InnoDB
也可能仍将修改后的数据缓存在内存中并且未刷新到磁盘。)
有关此备份方法的示例,请参见“ IMPORT TABLE语句”中的导出和导入示例。
进行分隔文本文件备份
要创建包含表数据的文本文件,可以使用。该文件是在MySQL服务器主机而非客户端主机上创建的。对于此语句,输出文件不能已经存在,因为允许文件被覆盖会构成安全风险。请参见“ SELECT语句”。此方法适用于任何类型的数据文件,但仅保存表数据,而不保存表结构。SELECT * INTO OUTFILE 'file_name' FROM tbl_name
创建文本数据文件(以及包含CREATE TABLE
备份表的语句的文件)的另一种方法是将mysqldump与该--tab
选项一起使用。请参见“使用mysqldump转储定界文本格式的数据”。
要重新加载带分隔符的文本数据文件,请使用LOAD DATA
或mysqlimport。
通过启用二进制日志进行增量备份
MySQL支持增量备份:必须使用--log-bin
选项启动服务器以启用二进制日志记录;请参见“MySQL服务器二进制日志”。二进制日志文件为您提供了将更改复制到数据库的信息,这些更改是在执行备份之后进行的。目前,您要进行增量备份(包含自上次完全备份或增量备份以来发生的所有更改),您应该使用FLUSH LOGS
。完成此操作后,您需要将所有二进制日志复制到备份位置,范围从上次完全备份或增量备份的那一刻到最后一次备份。这些二进制日志是增量备份。在还原时,按照“使用二进制日志进行时间点(增量)恢复”中的说明应用它们。下次进行完全备份时,还应该使用FLUSH LOGS
或mysqldump --flush-logs旋转二进制日志。请参见“mysqldump-数据库备份程序”。
使用复制从站进行备份
如果在进行备份时主服务器出现性能问题,则可以帮助您解决问题的一种策略是在从服务器(而不是主服务器)上设置复制并执行备份。请参见“使用复制进行备份”。
如果要备份从属复制服务器,则在备份从属数据库时,无论备份方法如何,都应备份其主信息和中继日志信息存储库(请参见“复制中继和状态日志”)。你选。恢复从属的数据后,恢复复制始终需要此信息。如果从属服务器正在复制LOAD DATA
语句,则还应该备份SQL_LOAD-*
该从属服务器用于此目的的目录中存在的所有文件。从站需要这些文件来恢复任何中断的LOAD DATA
操作的复制。该目录的位置是slave_load_tmpdir
系统变量。如果未使用该变量集启动服务器,则目录位置是tmpdir
系统变量的值。
恢复损坏的表
如果必须还原MyISAM
已损坏的表,请先尝试使用REPAIR TABLE
or myisamchk -r恢复它们。这应该在所有情况下的99.9%中起作用。如果myisamchk失败,请参见“ MyISAM表维护和崩溃恢复”。
使用文件系统快照进行备份
如果使用的是Veritas文件系统,则可以进行如下备份:
- 在客户端程序中,执行
FLUSH TABLES WITH READ LOCK
。 - 从另一个外壳执行
mount vxfs snapshot
。 - 从第一个客户端执行
UNLOCK TABLES
。 - 从快照复制文件。
- 卸载快照。
类似的快照功能可能在其他文件系统(例如LVM或ZFS)中可用。