为了方便创建部分备份,MySQL Enterprise Backup 从 3.10 版本开始引入了两个新的部分备份选项:--include-tables
和
--exclude-tables
. 新选项旨在替换
、
、 和
的旧选项--include
,
这些选项与新选项不兼容,将在即将发布的版本中弃用。在下面的讨论中,我们假设新选项用于部分备份。出于参考目的,我们在使用旧选项进行部分备份中的本节末尾包含了有关旧选项的信息
。
--databases
--databases-list-file
--only-innodb-with-frm
默认情况下,数据目录中数据库子目录下的所有文件都包含在备份中,因此备份包括来自所有 MySQL 存储引擎、任何第三方存储引擎的数据,甚至包括该目录中的任何非数据库文件。本节介绍可用于有选择地备份或排除数据的选项。
有多种方法可以使用 MySQL Enterprise Backup 创建不同类型的部分备份:
按名称包括或排除特定表。这使用
--include-tables
or--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
(或两者)选项。
有关所有涉及的选项的语法详细信息,请参阅 第 16.8 节,“部分备份和还原选项”。
通常,部分备份比完整备份更难恢复,因为备份数据可能不包括构成完整 MySQL 实例所必需的相互关联的部分。特别是,InnoDB 表具有内部 ID 和其他数据值,它们只能恢复到同一实例,而不能恢复到不同的 MySQL 服务器。始终全面测试任何部分备份的恢复过程,以了解相关过程和限制。
因为 InnoDB 系统表空间包含实例中所有数据库的有关 InnoDB 表的元数据,所以在包含其他数据库的服务器上恢复部分备份可能会导致系统丢失对其他数据库中那些 InnoDB 表的跟踪。始终在没有任何其他要保留的 InnoDB 表的情况下在新的 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
备份除 “ mysql ”和“ performance_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
备份“ sales reps ” 数据库中的所有表,但不包括名称为 “ euro-asia ”的表(自 3.12.1 版以来,部分备份选项支持空格或破折号等特殊字符):
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 表,但不.frm
备份文件:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --only-innodb backup-to-image
您还可以使用适当的命令选项进行 压缩备份和其他类型的选择性备份。
使用旧版选项进行部分备份
本小节中的信息仅适用于使用、
、 和
的遗留选项--include
,
这些选项将在下一期中弃用。对于创建部分备份,强烈建议
改用和
的新选项。请注意,您不能在单个命令中组合旧的和新的部分备份选项。
--databases
--databases-list-file
--only-innodb-with-frm
--include-tables
--exclude-tables
MySQL Enterprise Backup 可以使用传统的部分备份选项进行不同类型的部分备份:
包括某些 InnoDB 表但不包括其他表。此操作涉及
--include
、--only-innodb
和--only-innodb-with-frm
选项。包括来自选定数据库但不包括其他数据库的某些非 InnoDB 表。此操作涉及
--databases
和--databases-list-file
选项。
有关所有这些选项的语法详细信息,请参阅 旧版部分备份选项。
Typically, a partial backup is more difficult to restore than a full backup, because the backup data might not include the necessary interrelated pieces to constitute a complete MySQL instance. In particular, InnoDB tables have internal IDs and other data values that can only be restored to the same instance, not a different MySQL server. Always fully test the recovery procedure for any partial backups to understand the relevant procedures and restrictions.
With its --include
option,
mysqlbackup can make a backup that includes
some InnoDB tables but not others:
带有
--include
选项的部分备份总是包含 InnoDB 系统表空间和其中的所有表。对于存储在系统表空间之外的 InnoDB 表,部分备份仅包括那些名称与
--include
选项指定的正则表达式匹配的表。
此操作需要将被遗漏的表存储在单独的
文件中。要将 InnoDB 表放在系统表空间之外,请在
table_name
.ibdinnodb_file_per_table
启用 MySQL 配置选项时创建它。每个.ibd
文件只保存一个表的数据和索引。
Those InnoDB tables created with
innodb_file_per_table
turned off are stored
as usual in the InnoDB
system tablespace,
and cannot be left out of the backup.
对于具有每个表数据文件的每个表,将根据
选项db_name.table_name
指定的正则表达式检查
表单的字符串。--include
如果正则表达式匹配完整的字符串
db_name.table_name
,则该表将包含在备份中。使用的正则表达式语法是POSIX 1003.2 标准中指定的扩展形式。在类 Unix 系统上,适当地引用正则表达式以防止解释 shell 元字符。此功能已通过 RE2 正则表达式库实现。
生成的备份目录包含备份日志文件和 InnoDB 数据文件的副本。
重要提示:虽然
mysqlbackup支持进行部分备份,但从部分备份恢复数据库时要小心。
mysqlbackup还复制
.frm
未包含在备份中的那些表的文件,除非您使用例如--databases
选项进行部分备份。如果将mysqlbackup与该
--include
选项一起使用,则在恢复数据库之前,从备份数据中删除
.frm
未包含在备份中的任何表的文件。
IMPORTANT: Because the InnoDB system tablespace holds metadata about InnoDB tables from all databases in an instance, restoring a partial backup on a server that includes other databases could cause the system to lose track of those InnoDB tables in other databases. Always restore partial backups on a fresh MySQL server instance without any other InnoDB tables that you want to preserve.
The --only-innodb
and
--only-innodb-with-frm
options back
up InnoDB tables only, skipping those of other storage engines.
You might also use them together with the
--include
option to make selective
backup of InnoDB tables while excluding all other files created
by other storage engines.
Example 4.23 Making an Uncompressed Partial Backup of InnoDB Tables
In this example, we have configured MySQL so that some InnoDB
tables have their own tablespaces. We make a partial backup
including only those InnoDB tables in test
database whose name starts with ib
. The
contents of the database directory for test
database are shown below. The directory contains a MySQL
description file (.frm
file) for each of
the tables (alex1
,
alex2
, alex3
,
blobt3
, ibstest0
,
ibstest09
, ibtest11a,
ibtest11b
, ibtest11c
, and
ibtest11d
) in the database. Of these 10
tables six (alex1
,
alex2
, alex3
,
blobt3
, ibstest0
,
ibstest09
) are stored in per-table data
files (.ibd
files).
$ ls /sqldata/mts/test
alex1.frm alex2.ibd blobt3.frm ibstest0.ibd ibtest11a.frm ibtest11d.frm
alex1.ibd alex3.frm blobt3.ibd ibtest09.frm ibtest11b.frm
alex2.frm alex3.ibd ibstest0.frm ibtest09.ibd ibtest11c.frm
We run the mysqlbackup with the
--include
option:
# Back up some InnoDB tables but not any .frm files.
$ mysqlbackup --defaults-file=/home/dbadmin/my.cnf --include="^test\.ib.*" --only-innodb backup
# Contents in the backup directory's subdirectory for the test database:
$ ls /sqldata-backup/test
ibstest0.ibd ibtest09.ibd
# Back up some InnoDB tables and the .frm files for the backed-up tables only.
$ mysqlbackup --defaults-file=/home/dbadmin/my.cnf --include="^test\.ib.*" \
--only-innodb-with-frm=related backup
# Contents in the backup directory's subdirectory for the test database:
$ ls /sqldata-backup/test
ibstest0.frm ibtest09.frm
ibstest0.ibd ibtest09.ibd
The backup directory's subdirectory for the
test
database contains only backups of
ibstest0
and ibtest09
tables, because other InnoDB tables do not match the include
pattern ^test\.ib.*
. The related
.frm
files are included in the second
case. Notice that, however, the tables
ibtest11a
, ibtest11b
,
ibtest11c
, ibtest11d
are
in the backup even though they are not visible in the
directory shown below, because they are stored in the system
tablespace (ibdata1
file) which is always
included in the backup.
Example 4.24 Making a Compressed Partial Backup
We have configured MySQL so that every InnoDB table has its
own tablespace. We make a partial backup including only those
InnoDB tables whose name starts with alex
or blob
. The contents of the database
directory for test
database is shown below.
$ ls /sqldata/mts/test
alex1.frm alex2.ibd blobt3.frm ibstest0.ibd ibtest11a.frm ibtest11d.frm
alex1.ibd alex3.frm blobt3.ibd ibtest09.frm ibtest11b.frm
alex2.frm alex3.ibd ibstest0.frm ibtest09.ibd ibtest11c.frm
We run mysqlbackup with the
--compress
and
--include
options:
$ mysqlbackup --defaults-file=/home/dbadmin/my.cnf --compress \
--include=".*\.(alex|blob).*" --only-innodb backup
The backup directory for the database test
is shown below. The .ibz
files are
compressed per-table data files.
$ ls /sqldata-backup/test
alex1.ibz alex2.ibz alex3.ibz blobt3.ibz
The --databases
and
--databases-list-file
options of
mysqlbackup let you back up non-InnoDB tables
only from selected databases, rather than across the entire
MySQL instance. (To filter InnoDB tables, use the
--include
option instead.) With
--databases
, you specify a space-separated list
of database names, with the entire list enclosed in double
quotation marks. With --databases-list-file
,
you specify the path of a file containing the list of database
names, one per line.
Some or all of the database names can be qualified with table names, to only back up selected non-InnoDB tables from those databases.
如果指定此选项,请确保为每个备份(尤其是增量备份)包含相同的数据库集,这样您就不会还原任何数据库的过时版本。