4.3.5 制作部分备份

默认情况下,数据目录中数据库子目录下的所有文件都包含在备份中,因此备份包括来自所有 MySQL 存储引擎、任何第三方存储引擎的数据,甚至包括该目录中的任何非数据库文件。本节介绍可用于有选择地备份或排除数据的选项。

有多种方法可以使用 MySQL Enterprise Backup 创建不同类型的部分备份:

  • 按名称包括或排除特定表。这使用--include-tablesor --exclude-tables选项。

    --include-tables根据使用or --exclude-tables选项 指定的正则表达式检查每个表 。如果正则表达式与表的完全限定名称匹配(以 的形式 db_name.table_name),则该表包含或排除备份。使用的正则表达式语法是 POSIX 1003.2 标准中指定的扩展形式。选项已实现RE2 正则表达式库。

  • 包括部分或全部 InnoDB 表,但不包括其他表类型。这使用该 --only-innodb选项。

  • 忽略存在于 MySQL 数据目录中但实际上不属于 MySQL 实例的文件。这使用该--only-known-file-types 选项。

  • 通过使用上述选项的组合实现多种选择效果。

  • 使用可传输表空间 (TTS) 备份选择的 InnoDB 表 。这使用 --use-tts--include-tables--exclude-tables(或两者)选项。

有关所有涉及的选项的语法详细信息,请参阅 第 20.8 节,“部分备份和还原选项”

重要的

通常,部分备份比完整备份更难恢复,因为备份数据可能不包括构成完整 MySQL 实例所必需的相互关联的部分。特别是,InnoDB 表具有内部 ID 和其他数据值,它们只能恢复到同一实例,而不能恢复到不同的 MySQL 服务器。始终全面测试任何部分备份的恢复过程,以了解相关过程和限制。

以下是部分备份的一些命令示例。

将名称以emp开头的所有表包括 到备份中:

mysqlbackup \
 --host=localhost --user=mysqluser --protocol=TCP --port=3306 \
 --backup-dir=$MEB_TEMP_BACKUP_DIR --backup-image=$MEB_BACKUPS_DIR/my.mbi \
 --include-tables="\.emp" \
 backup-to-image

备份除 mysqlperformance_schema 数据库中的表之外的所有表:

mysqlbackup \
 --host=localhost --user=mysqluser --protocol=TCP --port=3306 \
 --backup-dir=$MEB_TEMP_BACKUP_DIR --backup-image=$MEB_BACKUPS_DIR/my.mbi \
 --exclude-tables="^(mysql|performance_schema)\." \
 backup-to-image

备份sales 数据库中的所有表,但排除名称为 hardware ”的表

mysqlbackup \
 --host=localhost --user=mysqluser --protocol=TCP --port=3306 \
 ---backup-dir=$MEB_TEMP_BACKUP_DIR --backup-image=$MEB_BACKUPS_DIR/my.mbi \
 --include-tables="^sales\." --exclude-tables="^sales\.hardware$" \
 backup-to-image

备份销售代表 数据库中的所有表,但排除名称为 euro-asia的表(部分备份选项支持空格或破折号等特殊字符):

mysqlbackup \
 --host=localhost --user=mysqluser --protocol=TCP --port=3306 \
 --backup-dir=$MEB_TEMP_BACKUP_DIR --backup-image=$MEB_BACKUPS_DIR/my.mbi \
 --include-tables="^sales reps\." --exclude-tables="^sales reps\.euro-asia" \
 backup-to-image

备份所有 InnoDB 表:

mysqlbackup \
 --host=localhost --user=mysqluser --protocol=TCP --port=3306 \
 --backup-dir=$MEB_TEMP_BACKUP_DIR --backup-image=$MEB_BACKUPS_DIR/my.mbi \
 --only-innodb \
 backup-to-image

您还可以使用适当的命令选项进行 压缩备份和其他类型的选择性备份。

使用旧版选项进行部分备份(已弃用)

重要的

本小节中的信息仅适用于使用--include已弃用的遗留选项。要创建部分备份,请改用 --include-tables--exclude-tables选项。

笔记

通常,部分备份比完整备份更难恢复,因为备份数据可能不包括构成完整 MySQL 实例所必需的相互关联的部分。特别是,InnoDB 表具有内部 ID 和其他数据值,它们只能恢复到同一实例,而不能恢复到不同的 MySQL 服务器。始终全面测试任何部分备份的恢复过程,以了解相关过程和限制。

通过它的--include选项, mysqlbackup可以进行备份,其中包括一些 InnoDB 表,但不包括其他表:

  • 带有--include选项的部分备份总是包含 InnoDB 系统表空间和其中的所有表。

  • 对于存储在系统表空间之外的 InnoDB 表,部分备份仅包括那些名称与 --include选项指定的正则表达式匹配的表。

此操作需要将被遗漏的表存储在单独的 table_name.ibd 文件中。要将 InnoDB 表放在系统表空间之外,请在 innodb_file_per_table启用 MySQL 配置选项时创建它。每个.ibd 文件只保存一个表的数据和索引。

innodb_file_per_table关闭时 创建的那些 InnoDB 表 照常存储在 InnoDB系统表空间中,并且不能被排除在备份之外。

对于具有每个表数据文件的每个表,将根据 选项db_name.table_name指定的正则表达式检查 表单的字符串。--include如果正则表达式匹配完整的字符串 db_name.table_name,则该表将包含在备份中。使用的正则表达式语法是POSIX 1003.2 标准中指定的扩展形式。在类 Unix 系统上,适当地引用正则表达式以防止解释 shell 元字符。此功能已通过 RE2 正则表达式库实现。

生成的备份目录包含备份日志文件和 InnoDB 数据文件的副本。

重要提示:因为 InnoDB 系统表空间包含实例中所有数据库的有关 InnoDB 表的元数据,所以在包含其他数据库的服务器上恢复部分备份可能会导致系统丢失对其他数据库中的那些 InnoDB 表的跟踪。始终在没有任何其他要保留的 InnoDB 表的情况下在新的 MySQL 服务器实例上恢复部分备份。

示例 4.22 对 InnoDB 表进行未压缩的部分备份

在此示例中,我们配置了 MySQL,以便某些 InnoDB 表具有自己的表空间。我们进行了部分备份,仅包括test 数据库中名称以 . 开头的 InnoDB 表ib。数据库的数据库目录的内容test 如下所示。在这 10 个表中,有六个(alex1, alex2, alex3, blobt3, ibstest0, ibstest09)存储在每个表的数据文件(.ibd files )中。

$ ls /sqldata/mts/test
alex2.ibd  ibstest0.ibd alex1.ibd  blobt3.ibd  alex3.ibd  ibtest09.ibd

我们使用以下 选项运行mysqlbackup--include

# Back up some InnoDB tables.
$ mysqlbackup --defaults-file=/home/dbadmin/my.cnf --include="^test\.ib.*" backup

# Contents in the backup directory's subdirectory for the test database:
$ ls /sqldata-backup/test
ibstest0.ibd   ibtest09.ibd

数据库的备份目录的子目录 test只包含 ibstest0ibtest09 表的备份,因为其他 InnoDB 表不匹配包含模式^test\.ib.*


示例 4.23 制作压缩的部分备份

我们已经配置了 MySQL,以便每个 InnoDB 表都有自己的表空间。我们进行了部分备份,仅包括那些名称以alex or开头的 InnoDB 表blob。数据库的数据库目录的内容test如下所示。

$ ls /sqldata/mts/test
alex2.ibd  ibstest0.ibd  alex1.ibd  blobt3.ibd  alex3.ibd  ibtest09.ibd

我们使用 和 选项 运行mysqlbackup :--compress--include

$ mysqlbackup --defaults-file=/home/dbadmin/my.cnf --compress \
  --include=".*\.(alex|blob).*" backup

数据库的备份目录test 如下所示。这些.ibz文件是按表压缩的数据文件。

$ ls /sqldata-backup/test
alex1.ibz   alex2.ibz   alex3.ibz   blobt3.ibz