4.3.5 Создание частичной резервной копии
Для облегчения создания частичных резервных копий, MySQL Enterprise Backup с версии 3.10 добавило две новые опции для частичных резервных копий: --include-tables и --exclude-tables. Новые опции предназначены для замены устаревших опций --include, --databases, --databases-list-file и --only-innodb-with-frm, которые несовместимы с новыми опциями и будут устаревшими в будущих выпусках. В последующих обсуждениях мы будем предполагать использование новых опций для частичных резервных копий. Для справки, информация об устаревших опциях приведена в конце этого раздела в Создание частичной резервной копии с устаревшими опциями.
По умолчанию, все файлы в подкаталогах базы данных в каталоге данных включаются в резервную копию, так что резервная копия включает данные всех хранилищ данных MySQL, любых сторонних хранилищ данных и даже любые файлы, не являющиеся базами данных, в этом каталоге. Этот раздел описывает опции, которые можно использовать для выборочного резервного копирования или исключения данных.
Существует несколько способов создания различных типов частичных резервных копий с помощью MySQL Enterprise Backup:
-
Включение или исключение определенных таблиц по их именам. Это делается с помощью опции
--include-tablesили--exclude-tables.Каждая таблица проверяется на соответствие регулярному выражению, указанному с помощью опции
--include-tablesили--exclude-tables. Если регулярное выражение соответствует полному квалифицированному имени таблицы (в форматеdb_name.table_name)), таблица включается или исключается из резервной копии. Синтаксис регулярных выражений использует расширенную форму, указанную в стандарте POSIX 1003.2. Эти опции были реализованы с использованием библиотеки регулярных выражений RE2. Включение некоторых или всех таблиц InnoDB, но не других типов таблиц. Это делается с помощью опции
--only-innodb.Исключение файлов, присутствующих в каталоге данных MySQL, но не являющихся частью экземпляра MySQL. Это делается с помощью опции
--only-known-file-types.Достижение нескольких эффектов выбора с помощью комбинации вышеупомянутых опций.
Резервное копирование выбранных таблиц InnoDB. Это делается с помощью опций
--use-ttsи--include-tablesили--exclude-tables(или обеих).
Подробные сведения о синтаксисе всех опций см. в разделе 16.8 «Опции частичного резервного копирования и восстановления».
Обычно частичная резервная копия восстанавливается сложнее, чем полная резервная копия, поскольку данные резервной копии могут не включать необходимые взаимосвязанные части для создания полного экземпляра MySQL. В частности, таблицы InnoDB имеют внутренние идентификаторы и другие значения данных, которые можно восстановить только в тот же экземпляр, а не в другой сервер MySQL. Всегда полностью тестируйте процедуру восстановления для любых частичных резервных копий, чтобы понять соответствующие процедуры и ограничения.
Поскольку пространство табличного пространства InnoDB содержит метаданные о таблицах InnoDB со всех баз данных в экземпляре, восстановление частичной резервной копии на сервере, который включает другие базы данных, может привести к тому, что система потеряет учет этих таблиц InnoDB в других базах данных. Всегда восстанавливайте частичные резервные копии на новом экземпляре сервера MySQL без каких-либо других таблиц InnoDB, которые вы хотите сохранить.
Ниже приведены некоторые примеры команд для частичных резервных копий.
Включение всех таблиц с именами, начинающимися с “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.
Подробные сведения о синтаксисе всех этих опций см. в разделе «Устаревшие опции частичного резервного копирования».
Обычно частичная резервная копия восстанавливается сложнее, чем полная резервная копия, поскольку данные резервной копии могут не включать необходимые взаимосвязанные части для создания полного экземпляра MySQL. В частности, таблицы InnoDB имеют внутренние идентификаторы и другие значения данных, которые можно восстановить только в тот же экземпляр, а не в другой сервер MySQL. Всегда полностью тестируйте процедуру восстановления для любых частичных резервных копий, чтобы понять соответствующие процедуры и ограничения.
С помощью опции --include, mysqlbackup может создать резервную копию, включающую некоторые таблицы InnoDB, но не другие:
Частичная резервная копия с опцией
--includeвсегда содержит пространство табличного пространства InnoDB и все таблицы внутри него.Для таблиц InnoDB, хранящихся вне пространства табличного пространства, резервная копия включает только те таблицы, имена которых соответствуют регулярному выражению, указанному с помощью опции
--include.
Для этого необходимо, чтобы исключаемые таблицы хранились в отдельных файлах. Чтобы поместить таблицу InnoDB вне пространства табличного пространства, создайте её, включив опцию конфигурации MySQL. Каждый table_name.ibd.ibd файл содержит данные и индексы только одной таблицы.
Таблицы InnoDB, созданные с выключенной опцией innodb_file_per_table, хранятся в обычном формате в InnoDB и не могут быть исключены из резервной копии.
Для каждой таблицы с файлом данных на таблицу строка вида db_name.table_name проверяется на соответствие регулярному выражению, указанному в опции --include. Если регулярное выражение соответствует полной строке db_name.table_name, таблица включается в резервную копию. Синтаксис регулярных выражений использует расширенную форму, указанную в стандарте POSIX 1003.2. В системах Unix-подобных системах необходимо соответствующим образом заключить регулярное выражение в кавычки, чтобы предотвратить интерпретацию символов оболочки.
Созданный каталог резервной копии содержит файл журнала резервной копии и копии файлов данных InnoDB.
ВАЖНО: Хотя mysqlbackup поддерживает частичные резервные копии, будьте осторожны при восстановлении базы данных из частичной резервной копии. mysqlbackup копирует также файлы .frm тех таблиц, которые не включены в резервную копию, за исключением случаев частичных резервных копий с использованием, например, опции --databases. Если вы используете mysqlbackup с опцией --include, перед восстановлением базы данных удалите из данных резервной копии файлы .frm для любых таблиц, которые не включены в резервную копию.
ВАЖНО: Поскольку системный пространство таблиц InnoDB содержит метаданные о таблицах InnoDB из всех баз данных в экземпляре, восстановление частичной резервной копии на сервере, который включает другие базы данных, может привести к тому, что система потеряет данные о таблицах InnoDB в других базах данных. Всегда восстанавливайте частичные резервные копии на свежем экземпляре сервера MySQL без каких-либо других таблиц InnoDB, которые вы хотите сохранить.
Опции --only-innodb и --only-innodb-with-frm резервируют только таблицы InnoDB, пропускают те, что относятся к другим движкам хранения. Вы также можете использовать их вместе с опцией --include, чтобы создать выборочную резервную копию таблиц InnoDB, исключая все другие файлы, созданные другими движками хранения.
Пример 4.23 Создание неархивированной частичной резервной копии таблиц InnoDB
В этом примере мы настроились MySQL так, что некоторые таблицы InnoDB имеют свои собственные пространства таблиц. Мы делаем частичную резервную копию, включающую только те таблицы InnoDB в базе данных test, имя которых начинается с ib. Ниже показано содержимое каталога базы данных для базы данных test. Каталог содержит файл описания MySQL (файл .frm) для каждой из таблиц (alex1, alex2, alex3, blobt3, ibstest0, ibstest09, ibtest11a,
ibtest11b, ibtest11c и ibtest11d) в базе данных. Из этих 10 таблиц шесть (alex1, alex2, alex3, blobt3, ibstest0, ibstest09) хранятся в отдельных файлах данных (файлы .ibd).
$ 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
Мы запускаем mysqlbackup с опцией --include:
# 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
Подкаталог резервной копии для базы данных test содержит только резервные копии таблиц ibstest0 и ibtest09, потому что другие таблицы InnoDB не соответствуют шаблону включения ^test\.ib.*. Связанные файлы .frm включены во втором случае. Обратите внимание, однако, что таблицы ibtest11a, ibtest11b, ibtest11c, ibtest11d находятся в резервной копии, даже если они не видны в показанном ниже каталоге, потому что они хранятся в системном пространстве таблиц (файл ibdata1), который всегда включается в резервную копию.
Пример 4.24 Создание сжатой частичной резервной копии
Мы настроили MySQL так, что каждая таблица InnoDB имеет собственное пространство таблиц. Мы делаем частичную резервную копию, включающую только те таблицы InnoDB, имена которых начинаются с alex или blob. Ниже показано содержимое каталога базы данных для базы данных test.
$ 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
Мы запускаем mysqlbackup с опциями --compress и --include:
$ mysqlbackup --defaults-file=/home/dbadmin/my.cnf --compress \
--include=".*\.(alex|blob).*" --only-innodb backup
Каталог резервной копии для базы данных test показан ниже. Файлы .ibz сжаты как файлы данных по каждой таблице.
$ ls /sqldata-backup/test
alex1.ibz alex2.ibz alex3.ibz blobt3.ibz
Опции --databases и --databases-list-file mysqlbackup позволяют резервировать только таблицы, не являющиеся InnoDB, из выбранных баз данных, а не по всему экземпляру MySQL. (Для фильтрации таблиц InnoDB используйте опцию --include.) С помощью --databases вы указываете список имён баз данных, разделённых пробелами, при этом весь список заключён в двойные кавычки. С помощью --databases-list-file вы указываете путь к файлу, содержащему список имён баз данных, по одному на строку.
Некоторые или все имена баз данных могут быть квалифицированы именами таблиц, чтобы резервировать только выбранные таблицы, не являющиеся InnoDB, из этих баз данных.
Если вы указываете эту опцию, убедитесь, что вы включаете один и тот же набор баз данных для каждой резервной копии (особенно для инкрементных резервных копий), чтобы не восстанавливать устаревшие версии каких-либо баз данных.
© 2025 Oracle
Licensed under the GPLv2 License.