MySQL数据库备份与恢复

时间:2020-06-10
本文章向大家介绍MySQL数据库备份与恢复,主要包括MySQL数据库备份与恢复使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1,备份和恢复分类

物理(原始)与逻辑备份

物理备份由存储数据库内容的目录和文件的原始副本组成。这种类型的备份适用于大型的重要数据库,这些数据库在出现问题时需要快速恢复。

逻辑备份保存表示为逻辑数据库结构(CREATE DATABASE, CREATE TABLE语句)和内容(INSERT语句或定界文本文件)的信息。这种备份类型适用于少量数据,可以在其中编辑数据值或表结构,或在其他计算机体系结构上重新创建数据。

联机与脱机备份

在线备份在MySQL服务器运行时进行,以便可以从服务器获取数据库信息。停止服务器时,将进行脱机备份。这种区别也可以描述为“  ”与 “  ”备份。一个“ 温暖 ”的备份是一个在服务器保持运行,但锁定,以防止当你从外部访问数据库文件修改数据。

联机备份方法具有以下特征:

  • 备份对其他客户端的干扰较小,其他客户端可以在备份期间连接到MySQL服务器,并且可以根据其需要执行的操作访问数据。

  • 必须注意施加适当的锁定,以免发生会损害备份完整性的数据修改。MySQL Enterprise Backup产品会自动执行这种锁定。

脱机备份方法具有以下特征:

  • 客户端可能会受到不利影响,因为备份期间服务器不可用。因此,此类备份通常是从复制从属服务器获取的,该复制从属服务器可以脱机使用而不会损害可用性。

  • 备份过程更简单,因为不可能受到客户端活动的干扰。

在线和离线之间的相似区别适用于恢复操作,并且相似的特征适用。但是,与联机备份相比,与联机备份相比,客户机更可能受到影响,因为恢复需要更强的锁定。在备份期间,客户端可能能够在备份数据时读取数据。恢复会修改数据,而不仅仅是读取数据,因此在还原数据时,必须防止客户端访问数据。

本地与远程备份

本地备份是在运行MySQL服务器的同一主机上执行的,而远程备份是从其他主机执行的。对于某些类型的备份,即使输出是本地写在服务器上,也可以从远程主机启动备份。主办。               1,mysqldump可以连接到本地或远程服务器。对于SQL输出(CREATE和 INSERT语句),可以完成本地或远程转储并在客户端上生成输出。对于带分隔符的文本输出(带有此 --tab选项),将在服务器主机上创建数据文件。

  2,SELECT ... INTO OUTFILE 可以从本地或远程客户端主机启动,但是输出文件在服务器主机上创建。

  3,物理备份方法通常在MySQL服务器主机上本地启动,以便使服务器脱机,尽管复制文件的目的地可能是远程的。

快照备份

一些文件系统实现使“ 快照 ” 得以拍摄。它们在给定的时间点提供文件系统的逻辑副本,而无需整个文件系统的物理副本。(例如,该实现可以使用写时复制技术,以便仅复制在快照时间之后修改的文件系统的某些部分。)MySQL本身不提供获取文件系统快照的功能。它可以通过Veritas,LVM或ZFS等第三方解决方案获得。

完整备份与增量备份

完全备份包括在给定时间点由MySQL服务器管理的所有数据。增量备份包括在给定时间段(从一个时间点到另一个时间点)内对数据所做的更改。MySQL有执行完全备份的不同方法,例如本节前面介绍的方法。通过启用服务器的二进制日志,使增量备份成为可能,服务器用于记录数据更改。

完全与时间点(增量)恢复

完全恢复可从完全备份中还原所有数据。这会将服务器实例还原到进行备份时的状态。如果该状态不是最新状态,则可以执行完全恢复,然后恢复自完全备份以来进行的增量备份,以使服务器进入最新状态。

增量恢复是指在给定时间范围内所做的更改的恢复。这也称为时间点恢复,因为它使服务器的状态在给定时间之前为当前状态。时间点恢复基于二进制日志,通常会从备份文件中进行完全恢复,从而将服务器恢复到进行备份时的状态。然后,将写入二进制日志文件中的数据更改作为增量恢复来应用,以重做数据修改并使服务器达到所需的时间点。

2,数据库备份方式

常见的方法有

使用MySQL Enterprise Backup进行热备份

MySQL企业版的客户可以使用 MySQL企业备份产品对整个实例或选定的数据库,表或两者进行 物理备份。该产品包括 增量备份和 压缩备份的功能。备份物理数据库文件使恢复比逻辑技术(如mysqldump 命令)快得多。InnoDB使用热备份机制复制表 。(理想情况下,这些InnoDB表应代表大部分数据。)使用热备份从其他存储引擎复制表机制。

使用mysqldump进行备份

mysqldump的程序可以进行备份。它可以备份各种表。

对于InnoDB表,可以使用mysqldump--single-transaction选项 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。

 备份所有数据库

 备份指定数据库

 备份指定数据库的表(前面两个命令之间的区别在于,不带--databases,转储输出不包含CREATE DATABASE或者 USE 语句,因此恢复到指定库,没有则需要创建目标库)

 在shell通过mysql命令恢复

 在mysql内部恢复

通过复制表文件进行备份

对于不同的存储引擎表,可以通过复制这些文件来备份表。例如, MyISAM表作为文件存储,所以很容易复制文件(做一个备份*.frm, *.MYD以及*.MYI文件)。要获得一致的备份,需停止服务器或锁定并刷新相关表:

只需要一个读锁;这样,当在数据库目录中复制文件时,其他客户端就可以继续查询表。需要刷新才能确保在开始备份之前将所有活动索引页都写入磁盘。

还可以仅通过复制所有表文件来创建二进制备份,只要服务器不更新任何内容即可。(但是请注意,如果数据库中包含InnoDB表,则表文件复制方法将不起作用。而且,即使服务器未在主动更新数据,InnoDB 也可能仍将修改后的数据缓存在内存中并且未刷新到磁盘。)

进行分隔文本文件备份

要创建包含表数据的文本文件 。该文件是在MySQL服务器主机而非客户端主机上创建的。对于此语句,输出文件不能已经存在,因为允许文件被覆盖会带来安全风险。此方法适用于任何类型的数据文件,但仅保存表数据,而不保存表结构。 SELECT * INTO OUTFILE 'file_name' FROM tbl_name

创建文本数据文件(以及包含CREATE TABLE用于备份表的语句的文件)的另一种方法 是将mysqldump--tab选项一起使用。

对于mysqldump --tab,服务器默认将表数据写入.txt文件,每行一行,在列值之间使用制表符,在列值之间没有引号,并使用换行符作为行终止符。(这些默认值与相同 SELECT ... INTO OUTFILE。)

为了使数据文件可以使用其他格式写入, mysqldump支持以下选项。

  • --fields-terminated-by=str

    用于分隔列值的字符串(默认值:制表符)。

  • --fields-enclosed-by=char

    包含列值的字符(默认值:无字符)。

  • --fields-optionally-enclosed-by=char

    包含非数字列值的字符(默认值:无字符)。

  • --fields-escaped-by=char

    用于转义特殊字符的字符(默认值:不转义)。

  • --lines-terminated-by=str

    行终止字符串(默认值:换行符)。

要重新加载带分隔符的文本数据文件,使用 LOAD DATA

或 mysqlimport

通过启用二进制日志进行增量备份

MySQL支持增量备份:必须使用--log-bin选项启动服务器以启用二进制日志记录。二进制日志文件为提供了将更改复制到数据库的信息,这些更改是在执行备份之后进行的。目前,要进行增量备份(包含自上次完全备份或增量备份以来发生的所有更改),应使用FLUSH LOGS。完成此操作后,需要将所有二进制日志复制到备份位置,范围从上次完全备份或增量备份的那一刻到最后一次备份。这些二进制日志是增量备份。

 

原文地址:https://www.cnblogs.com/jinli1771/p/13083765.html