Эта секция объясняет приготовления, в которых вы нуждаетесь для создания резервных копий с MySQL Enterprise Backup, типичный цикл backup-verify-restore и различные сценарии для использования MySQL Enterprise Backup. Это также включает типовые команды и вывод показывая вам, как использовать mysqlbackup в различных ситуациях.
Эта секция обрисовывает в общих чертах некоторые приготовления, необходимые, прежде чем можно будет начать работать с MySQL Enterprise Backup.
Перед поддержкой конкретного сервера базы данных впервые, соберите некоторую информацию и используйте ее, чтобы принять некоторые решения планирования, как обрисовано в общих чертах в следующей таблице.
Таблица 4.1. Необходимая информация, чтобы зарезервировать базу данных
Информация |
Где найти |
Как ее использовать |
---|---|---|
Путь к конфигурационному файлу MySQL. |
Системные местоположения по умолчанию, жестко заданные параметры
приложений по умолчанию или опция
|
Предпочтительный способ передать конфигурационную информацию базы
данных mysqlbackup состоит в том,
чтобы использовать опцию
|
Порт MySQL. |
Конфигурационный файл MySQL или стартовый скрипт mysqld. |
Используется, чтобы соединиться с экземпляром базы данных во время
операций резервного копирования. Определен через опцию
|
Путь к каталогу данных MySQL. |
Конфигурационный файл MySQL или стартовый скрипт mysqld. |
Используется, чтобы восстановить файлы от экземпляра базы данных во время операций резервного копирования и скопировать файлы назад в базу данных во время операции восстановления. Автоматически восстановлен от соединения с базой данных. |
ID и пароль привилегированного пользователя MySQL. |
Вы делаете запись этого во время установки ваших собственных баз данных или получаете ее от DBA, поддерживая базы данных, которыми вы не владеете. |
Определен опцией |
Путь, под которым можно сохранить данные резервного копирования или метаданные, временно или постоянно. |
Вы выбираете это. Посмотрите раздел 4.1.3. |
В целом этот каталог должен быть пустым для mysqlbackup, чтобы писать данные в него. |
Владелец и данные полномочий для файлов (для систем Linux, Unix и OS X). |
В каталоге данных MySQL. |
Если вы выполняете резервную копию и восстанавливаете с использованием другого пользователя OS, чем тот, который управляет сервером, эта информация могла бы стать важной. Посмотрите раздел 4.2.1. |
Размер файлов журнала отката InnoDB. |
Вычислен из значений переменных конфигурации
|
Нужно только, если вы выполняете возрастающие резервные копии,
используя опцию
|
Уровень, по которому произведены данные журнала отката. |
Вычислено из числа последовательности
логических операций InnoDB в различных моментах времени.
Используйте технику, объясненную для опцию
|
Надо только, если вы выполняете возрастающие резервные копии,
используя
|
mysqlbackup соединяется с сервером MySQL,
используя параметры, поставляемые опциями --user
и
--password
. Указанный
user
нуждается в определенных привилегиях.
Можно создать нового пользователя с ограниченным набором привилегий или
использовать административную учетку, например, root.
Вот привилегии, требуемые mysqlbackup:
Минимальные привилегии для пользователя MySQL, с которым mysqlbackup работает с сервером, включают:
SELECT
на всех базах данных и таблицах для блокировок
таблицы, которые защищают резервные копии от несоответствия, вызванного
параллельными операциями DDL.
BACKUP_ADMIN
на всех базах данных и таблицах.
RELOAD
на всех базах данных и таблицах.
SUPER
, чтобы включить и отключить регистрацию и
оптимизировать блокировку, чтобы минимизировать разрушение
обработки базы данных.
REPLICATION CLIENT
, чтобы получить позицию
двоичного журнала,
которая сохранена резервной копией.
PROCESS
, чтобы обработать
запросы с ALGORITHM = INPLACE
.
CREATE
, INSERT
,
DROP
и UPDATE
на таблицах
mysql.backup_progress
и mysql.backup_history
, а
также SELECT
и ALTER
на
mysql.backup_history
.
Чтобы создать пользователя MySQL (mysqlbackup
в этом примере) и задать вышеупомянутые привилегии для пользователя,
соединяющегося от localhost, сделайте в mysql
:
CREATE USER 'mysqlbackup'@'localhost' IDENTIFIED BY 'password
';
GRANT SELECT, BACKUP_ADMIN, RELOAD, PROCESS, SUPER, REPLICATION CLIENT ON *.*
TO `mysqlbackup`@`localhost`;
GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO 'mysqlbackup'@'localhost';
GRANT CREATE, INSERT, DROP, UPDATE, SELECT, ALTER ON mysql.backup_history
TO 'mysqlbackup'@'localhost';
Следующие дополнительные привилегии требуются для того, чтобы использовать определенные функции MySQL Enterprise Backup:
Для использования transportable tablespaces (TTS), чтобы резервировать и восстановить таблицы InnoDB:
LOCK TABLES
для поддержки таблиц.
CREATE
для восстановления таблиц.
DROP
для удаления таблиц, если восстановление терпит
неудачу по некоторым причинам.
FILE
для восстановления таблиц
во внешних табличных пространствах за пределами каталога данных сервера.
Для создания резервных копий на магнитную ленту, используя System Backup to Tape (SBT) API:
CREATE
, INSERT
,
DROP
и UPDATE
на таблице
mysql.backup_sbt_history
.
Для работы с зашифрованными таблицыми InnoDB:
ENCRYPTION_KEY_ADMIN
,
чтобы позволить ротацию ключа шифрования InnoDB.
Для поддержки и восстановления созданных пользователями таблиц не-InnoDB:
LOCK TABLES
на всех схемах, содержащих созданные
пользователями не-InnoDB таблицы.
Для применения архивирования журнала отката для резервных копий:
, чтобы вызвать
определенную пользователями функцию
INNODB_REDO_LOG_ARCHIVE
.
innodb_redo_log_archive_start()
Установите эти дополнительные привилегии, если вы используете функции,
которые их требуют. Чтобы установить их все, сделайте в mysql
:
GRANT LOCK TABLES, CREATE, DROP, FILE ON *.* TO 'mysqlbackup'@'localhost';
GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_sbt_history
TO 'mysqlbackup'@'localhost';
GRANT ENCRYPTION_KEY_ADMIN ON *.* TO 'mysqlbackup'@'localhost';
GRANT INNODB_REDO_LOG_ARCHIVE ON *.* TO 'mysqlbackup'@'localhost';
Для привилегий, требуемых для использования MySQL Enterprise Backup с Group Replication, см. главу 9.
Следующие дополнительные привилегии могли бы также требоваться после модернизации сервера:
Используя MySQL Enterprise Backup 8.0.19 или позже впервые на MySQL Server, который был модернизирован от 8.0.18 или ранее и был поддержан MySQL Enterprise Backup :
ALTER
на mysql.backup_progress
.
CREATE
, INSERT
и DROP
на
mysql.backup_progress_old
.
CREATE
, INSERT
, DROP
и
ALTER
на mysql.backup_progress_new
.
Предоставьте эти привилегии, делая эти типовые запросы в mysql:
GRANT ALTER ON mysql.backup_progress TO 'mysqlbackup'@'localhost';
GRANT CREATE, INSERT, DROP ON mysql.backup_progress_old
TO 'mysqlbackup'@'localhost';
GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup_progress_new
TO 'mysqlbackup'@'localhost';
Если вы работаете с Group Replication с несколькими ведущими, удостоверьтесь, что эти привилегии предоставляют на всех основных узлах, см. также главу 9.
Эти привилегии для попытки мигрировать таблицу
mysql.backup_progress
к более новому формату (см.
приложение F), они больше не необходимы после
первой операции резервного копирования MySQL Enterprise Backup 8.0.19
или позже на сервере, поэтому они могут быть отменены.
Используя MySQL Enterprise Backup 8.0.12 или позже впервые на MySQL Server, который был модернизирован от 8.0.11 или ранее и был поддержан MySQL Enterprise Backup :
CREATE
, INSERT
и DROP
на
mysql.backup_history_old
.
CREATE
, INSERT
, DROP
и
ALTER
на mysql.backup_history_new
.
Предоставьте эти привилегии, делая эти типовые запросы в mysql:
GRANT CREATE, INSERT, DROP ON mysql.backup_history_old
TO 'mysqlbackup'@'localhost';
GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup_history_new
TO 'mysqlbackup'@'localhost';
Если вы работаете с Group Replication с несколькими ведущими, удостоверьтесь, что эти привилегии предоставляют на всех основных узлах, см. также главу 9.
Эти привилегии нужны для попытки мигрировать таблицу
mysql.backup_history
к более новому формату (см.
приложение D), и они больше не необходимы после
первой операции резервного копирования MySQL Enterprise Backup 8.0.12
или позже, поэтому они могут быть отменены.
Выполняя впервые резервную копию через SBT API с MySQL Enterprise Backup 8.0.21 или позже на MySQL Server, который был модернизирован от 8.0.20 или ранее и был поддержан MySQL Enterprise Backup через SBT API :
ALTER
на mysql.backup_sbt_history
.
CREATE
, INSERT
и
DROP
на mysql.backup_sbt_history_old
.
CREATE
, INSERT
, DROP
и
ALTER
на mysql.backup_sbt_history_new
.
Предоставьте эти привилегии, делая эти типовые запросы в mysql:
GRANT ALTER ON mysql.backup_sbt_history TO 'mysqlbackup'@'localhost';
GRANT CREATE, INSERT, DROP ON mysql.backup_sbt_history_old
TO 'mysqlbackup'@'localhost';
GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup_sbt_history_new
TO 'mysqlbackup'@'localhost';
Если вы работаете с Group Replication, удостоверьтесь, что эти привилегии предоставляют на всех основных узлах, см. также главу 9.
Эти привилегии нужны для попытки мигрировать таблицу
mysql.backup_sbt_history
к более новому формату (см.
приложение E), они больше не необходимы после
первой операции резервного копирования MySQL Enterprise Backup 8.0.21
или позже с использованием SBT API на сервере, поэтому
они могут быть отменены.
Удостоверьтесь что предел MAX_QUERIES_PER_HOUR
не установлен для пользователя mysqlbackup,
чтобы получить доступ к серверу, или операции резервного копирования могут
неожиданно потерпеть неудачу.
Большинство операций mysqlbackup,
резервное копирование файлов, запись данных или метаданных, обращаются к
определяемому каталогу, называемому
резервным каталогом. См. описание для
--backup-dir
.
Выберите заранее для этого каталога местоположение в файловой системе с
достаточным местом, это может быть даже удаленный сервер.
Вы определяете путь к этому каталогу с помощью опции
--backup-dir
.
При использовании резервного каталога в качестве местоположения, чтобы
сохранить ваши резервные копии, предпочтительно держать каждую резервную
копию в подкаталоге с меткой времени под главным резервным каталогом.
Чтобы заставить mysqlbackup
создать эти подкаталоги автоматически, определите опцию
--with-timestamp
при запуске mysqlbackup.
Чтобы иллюстрировать основные шаги в создании и использовании резервной копии, рассмотрим как выполнить полное резервное копирование, проверим его, а затем вернем его на сервер.
Linux и Unix-системы:
mysqlbackup
не делает запись принадлежности файла или разрешений файлов, которые
резервируются. Чтобы гарантировать отсутствие проблемы разрешения файла и то,
что сервер, который зарезервирован, будет восстановлен и перезапущен успешно,
настоятельно рекомендовано выполнять mysqlbackup
тем же самым пользователем OS, который управляет сервером MySQL (как правило,
это mysql
). Если это невозможно, обратите внимание
на следующие рекомендации:
Для резервных копий mysqlbackup
должен управлять пользователь, который может прочитать все каталоги и файлы
сервера. Чтобы удовлетворить это требование, пользователь OS, который
управляет mysqlbackup, должен, например, быть
владельцем группы файлов сервера и каталогов (как правило,
mysql
) как его основной или вторичной группы.
Для восстановления, если mysqlbackup
не управляет тот же самый пользователь, который управляет сервером, может
быть очень трудно гарантировать, что у сервера есть доступ ко всем
восстановленным файлам сервера, особенно в случае онлайн-восстановления, где
сервер должен быть в состоянии получить доступ к файлам немедленно после
того, как они восстановлены. Для офлайнового восстанавления
вы, возможно, должны были бы, например, задать umask
пользователю перед тем, как восстанавливать и урегулировать разрешения
восстановленных файлов, используя серию команд
chmod
и chown
, чтобы оригинальные разрешения для
файлов были воспроизведены.
В следующем примере мы поддерживаем весь MySQL к единственному файлу,
используя команду
backup-to-image
, которая появляется в конце типовой команды.
Мы определяем часть информации о связи для базы данных, используя опции
--user
и --host
(и --password
, чтобы
mysqlbackup запросил пароль).
Местоположение и имя файла для единственного резервного копирования файлов
определяются, используя опцию
--backup-image
, а местоположение пустого каталога, чтобы
хранить временные файлы поставляется опцией
--backup-dir
.
Вывод повторяет все параметры, используемые операцией резервного копирования, включая несколько, которые восстанавливаются, автоматически используя соединение с базой данных. Уникальный идентификатор для этого задания резервного копирования зарегистрирован в специальных таблицах, которые mysqlbackup составляет в экземпляре MySQL, позволяя вам контролировать продолжительные резервные копии и информацию о предыдущих резервных копиях. Секция окончательного результата повторяет местоположение данных резервного копирования и предоставляет значения LSN, которые вы могли бы использовать, когда вы выполняете инкрементное резервное копирование в следующий раз после полного резервного копирования, которое было сделано.
$ mysqlbackup --user=mysqlbackup --password --host=127.0.0.1 \ --backup-image=/home/mysqlbackup/backups/my.mbi \ --backup-dir=/home/mysqlbackup/backup-tmpbackup-to-image MySQL Enterprise BackupVer 8.0.16-commercial for linux-glibc2.12 on x86_64 (MySQL Enterprise - Commercial) Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Starting with following command line ... mysqlbackup --user=mysqlbackup --password --host=127.0.0.1 --backup-image=/home/mysqlbackup/backups/my.mbi --backup-dir=/home/mysqlbackup/backup-tmp backup-to-image IMPORTANT: Please check that mysqlbackup run completes successfully. At the end of a successful 'backup-to-image' run mysqlbackup prints "mysqlbackup completed OK!". 190402 12:56:04 MAININFO: Starting to log actions. Enter password: 190402 12:56:09 MAININFO: No SSL options specified. 190402 12:56:09 MAININFO: MySQL server version is '8.0.16-commercial' 190402 12:56:09 MAININFO: MySQL server compile os version is 'linux-glibc2.12' 190402 12:56:09 MAININFO: Got some server configuration information from running server. 190402 12:56:09 MAININFO: Backup directory exists: '/home/mysqlbackup/backup-tmp' 190402 12:56:09 MAININFO: MySQL server version_comment is 'MySQL Enterprise Server - Commercial' 190402 12:56:09 MAININFO: Server is not a community server. 190402 12:56:09 MAININFO: KEF target path: '/home/mysqlbackup/backup-tmp/meta/keyring_kef' 190402 12:56:09 MAININFO: TDE Keyring service initialized. 190402 12:56:09 MAININFO: MEB logfile created at /home/mysqlbackup/backup-tmp/meta/MEB_2019-04-02.12-56-09_image_backup.log -------------------------------------------------------------------- Server Repository Options: -------------------------------------------------------------------- datadir= /home/admin/bin/mysql-commercial-8.0.16/datadir/ innodb_data_home_dir = innodb_data_file_path = ibdata1:12M:autoextend innodb_log_group_home_dir = /home/admin/bin/mysql-commercial-8.0.16/datadir/ innodb_log_files_in_group = 2 innodb_log_file_size = 50331648 innodb_undo_directory = /home/admin/bin/mysql-commercial-8.0.16/datadir/ innodb_undo_tablespaces = 2 innodb_buffer_pool_filename = ib_buffer_pool innodb_page_size = 16384 innodb_checksum_algorithm = crc32 -------------------------------------------------------------------- Backup Config Options: -------------------------------------------------------------------- datadir = /home/mysqlbackup/backup-tmp/datadir innodb_data_home_dir = /home/mysqlbackup/backup-tmp/datadir innodb_data_file_path = ibdata1:12M:autoextend innodb_log_group_home_dir = /home/mysqlbackup/backup-tmp/datadir innodb_log_files_in_group = 2 innodb_log_file_size = 50331648 innodb_undo_directory = /home/mysqlbackup/backup-tmp/datadir innodb_undo_tablespaces = 2 innodb_buffer_pool_filename = ib_buffer_pool innodb_page_size = 16384 innodb_checksum_algorithm = crc32 Backup Image Path = /home/mysqlbackup/backups/my.mbi 190402 12:56:09 MAININFO: Unique generated backup id for this is 15542241696070511 190402 12:56:09 MAININFO: Creating 14 buffers each of size 16777216. 190402 12:56:09 MAININFO: Full Image Backup operation starts with following threads 1 read-threads6 process-threads1 write-threads 190402 12:56:09 MAININFO: Found checkpoint at lsn 19840686. 190402 12:56:09 MAININFO: Starting log scan from lsn = 19840512 at offset = 32256 and checkpoint = 19840686 in file /home/admin/bin/mysql-commercial-8.0.16/datadir/ib_logfile0. 190402 12:56:09 RDR1INFO: Copying meta file /home/mysqlbackup/backup-tmp/backup-my.cnf. 190402 12:56:09 RDR1INFO: Copying meta file /home/mysqlbackup/backup-tmp/meta/backup_create.xml. 190402 12:56:09 RDR1INFO: Starting to copy all innodb files... 190402 12:56:09 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/ibdata1. 190402 12:56:09 RDR1INFO: Starting to copy all undo files... 190402 12:56:09 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/undo_002. 190402 12:56:09 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/undo_001. 190402 12:56:09 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/sys/sys_config.ibd. 190402 12:56:09 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/pets/cats.ibd. 190402 12:56:09 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/mysql/backup_history.ibd. 190402 12:56:09 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/mysql.ibd. 190402 12:56:10 RDR1INFO: Completing the copy of innodb files. 190402 12:56:10 RDR1INFO: Requesting a dump of the InnoDB buffer pool 190402 12:56:10 RDR1INFO: Waiting for the dump of the InnoDB buffer pool to complete 190402 12:56:10 RDR1INFO: The dump of the InnoDB buffer pool completed 190402 12:56:10 RDR1INFO: Binary Log Basename: '/home/admin/bin/mysql-commercial-8.0.16/datadir/binlog' 190402 12:56:10 RDR1INFO: Binary Log Index:'/home/admin/bin/mysql-commercial-8.0.16/datadir/binlog.index' 190402 12:56:10 RDR1INFO: Relay Channel:'group_replication_applier' 190402 12:56:10 RDR1INFO: Relay Log Basename: '/home/admin/bin/mysql-commercial-8.0.16/datadir/admin-XuBox-relay-bin-group_replication_applier' 190402 12:56:10 RDR1INFO: Relay Log Index:'/home/admin/bin/mysql-commercial-8.0.16/datadir/admin-XuBox-relay-bin-group_replication_applier.index' 190402 12:56:10 RDR1INFO: Relay Channel:'group_replication_recovery' 190402 12:56:10 RDR1INFO: Relay Log Basename: '/home/admin/bin/mysql-commercial-8.0.16/datadir/admin-XuBox-relay-bin-group_replication_applier-group_replication_recovery' 190402 12:56:10 RDR1INFO: Relay Log Index:'/home/admin/bin/mysql-commercial-8.0.16/datadir/admin-XuBox-relay-bin-group_replication_recovery.index' 190402 12:56:10 RDR1INFO: Starting to copy Binlog files... 190402 12:56:10 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/binlog.000001. 190402 12:56:10 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/binlog.000002. 190402 12:56:10 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/binlog.000003. 190402 12:56:10 RDR1INFO: Starting to lock instance for backup... 190402 12:56:10 RDR1INFO: No SSL options specified. 190402 12:56:10 RDR1INFO: The server instance is locked for backup. 190402 12:56:10 RDR1INFO: Starting to read-lock tables... 190402 12:56:10 RDR1INFO: No tables to read-lock. 190402 12:56:10 RDR1INFO: Opening backup source directory '/home/admin/bin/mysql-commercial-8.0.16/datadir' 190402 12:56:10 RDR1INFO: Starting to copy non-innodb files in subdirs of '/home/admin/bin/mysql-commercial-8.0.16/datadir' 190402 12:56:10 WTR1INFO: Adding database directory: datadir/mysql 190402 12:56:10 WTR1INFO: Adding database directory: datadir/performance_schema 190402 12:56:10 RDR1INFO: Completing the copy of all non-innodb files. 190402 12:56:10 WTR1INFO: Adding database directory: datadir/pets 190402 12:56:10 WTR1INFO: Adding database directory: datadir/sys 190402 12:56:10 RDR1INFO: Requesting consistency information... 190402 12:56:10 RDR1INFO: Locked the consistency point for 3089 microseconds. 190402 12:56:10 RDR1INFO: Consistency point server_uuid 'a01aa59f-5567-11e9-ad69-08002759ceb5'. 190402 12:56:10 RDR1INFO: Consistency point gtid_executed ''. 190402 12:56:10 RDR1INFO: Consistency point binary_log_file 'binlog.000004'. 190402 12:56:10 RDR1INFO: Consistency point binary_log_position 379. 190402 12:56:10 RDR1INFO: Consistency point InnoDB lsn 19840686. 190402 12:56:10 RDR1INFO: Consistency point InnoDB lsn_checkpoint 19840686. 190402 12:56:10 RDR1INFO: Requesting completion of redo log copy after LSN 19840686. 190402 12:56:10 RLR1INFO: Redo log reader waited = 0.00 ms for logs to generate. 190402 12:56:10 RLW1INFO: A copied database page was modified at 19840686. (This is the highest lsn found on a page) 190402 12:56:10 RLW1INFO: Scanned log up to lsn 19840686. 190402 12:56:10 RDR1INFO: Copying /home/admin/bin/mysql-commercial-8.0.16/datadir/binlog.000004. 190402 12:56:10 RDR1INFO: Completed the copy of binlog files... 190402 12:56:10 RDR1INFO: The server instance is unlocked after 0.085 seconds. 190402 12:56:10 RDR1INFO: Reading all global variables from the server. 190402 12:56:10 RDR1INFO: Completed reading of all 548 global variables from the server. 190402 12:56:10 RDR1INFO: Writing server defaults files 'server-my.cnf' and 'server-all.cnf' for server '8.0.16-commercial' in '/home/mysqlbackup/backup-tmp'. 190402 12:56:10 RDR1INFO: Copying meta file /home/mysqlbackup/backup-tmp/meta/backup_variables.txt. 190402 12:56:10 RDR1INFO: Copying meta file /home/mysqlbackup/backup-tmp/datadir/ibbackup_logfile. 190402 12:56:10 RDR1INFO: Copying meta file /home/mysqlbackup/backup-tmp/server-all.cnf. 190402 12:56:10 RDR1INFO: Copying meta file /home/mysqlbackup/backup-tmp/server-my.cnf. 190402 12:56:10 RDR1INFO: Copying meta file /home/mysqlbackup/backup-tmp/meta/backup_content.xml. 190402 12:56:10 RDR1INFO: Copying meta file /home/mysqlbackup/backup-tmp/meta/image_files.xml. 190402 12:56:10 MAININFO: Full Image Backup operation completed successfully. 190402 12:56:10 MAININFO: Backup image created successfully. 190402 12:56:10 MAININFO: Image Path = /home/mysqlbackup/backups/my.mbi 190402 12:56:10 MAININFO: MySQL binlog position: filename binlog.000004, position 379 ------------------------------------------------------------- Parameters Summary ------------------------------------------------------------- Start LSN: 19840512 End LSN: 19840686 ------------------------------------------------------------- mysqlbackup completed OK!
Можно проверить целостность резервной копии, используя команду
validate
.
Следующее это типовая команда для проверки образа резервной копии и вывод
для успешной проверки:
$ mysqlbackup --backup-image=/home/mysqlbackup/backups/my.mbi validate
MySQL Enterprise BackupVer 8.0.16-commercial for linux-glibc2.12 on x86_64
(MySQL Enterprise - Commercial)
Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of
their respective owners.
Starting with following command line ...
bin/mysqlbackup --backup-image=/home/mysqlbackup/backups/my.mbi validate
IMPORTANT: Please check that mysqlbackup run completes successfully.
At the end of a successful 'validate' run mysqlbackup
prints "mysqlbackup completed OK!".
190401 17:27:14 MAININFO: Starting to log actions.
190401 17:27:14 MAININFO: Backup Image MEB version string: 8.0.16 [2019-03-2618:51:33]
190401 17:27:14 MAININFO: MySQL server version is '8.0.16'
190401 17:27:14 MAININFO: TDE Keyring service initialized.
190401 17:27:14 MAININFO: Creating 14 buffers each of size 16777216.
190401 17:27:14 MAININFO: Validate operation starts with following threads
1 read-threads6 process-threads
190401 17:27:14 MAININFO: Validating image ... /home/mysqlbackup/backups/my.mbi
190401 17:27:14 PCR1INFO: Validate: [Dir]: meta
190401 17:27:14 PCR1INFO: Validate: [Dir]: datadir/mysql
190401 17:27:14 PCR1INFO: Validate: [Dir]: datadir/performance_schema
190401 17:27:14 PCR1INFO: Validate: [Dir]: datadir/pets
190401 17:27:14 PCR1INFO: Validate: [Dir]: datadir/sys
190401 17:27:14 MAININFO: Total files as specified in image: 137
190401 17:27:14 MAININFO: datadir/ibdata1 validated.
190401 17:27:14 MAININFO: datadir/undo_002 validated.
190401 17:27:14 MAININFO: datadir/undo_001 validated.
190401 17:27:14 MAININFO: datadir/sys/sys_config.ibd validated.
190401 17:27:14 MAININFO: datadir/pets/cats.ibd validated.
190401 17:27:14 MAININFO: datadir/mysql/backup_history.ibd validated.
190401 17:27:14 MAININFO: datadir/mysql.ibd validated.
190401 17:27:14 MAININFO: Validate operation completed successfully.
190401 17:27:14 MAININFO: Backup Image validation successful.
190401 17:27:14 MAININFO: Source Image Path = /home/mysqlbackup/backups/my.mbi
mysqlbackup completed OK!
Кроме того, можно также проверить, что резервная копия была успешна,
восстановив данные резервного копирования на ином сервере и запустив
демон MySQL (mysqld)
на новом каталоге данных. Можно тогда выполнить запросы SHOW
,
чтобы проверить базу данных и структуры таблиц и выполнить запросы, чтобы
проверить более подробную информацию базы данных. Посмотрите
раздел 4.2.4
для основных шагов для восстановления резервной копии и см.
главу 5 для более подробных инструкций.
Не пытайтесь проверить резервную копию при помощи резервного каталога как каталога данных, чтобы запустить сервер MySQL. Это грохнет сервер и могло бы также испортить вашу резервную копию. См. детали в приложении A.
Чтобы восстановить MySQL из резервной копии на сервер базы данных:
Закройте сервер базы данных.
Удалите все файлы в каталоге данных сервера. Также удалите все файлы в
каталогах, определенных опциями
--innodb_data_home_dir
,
--innodb_log_group_home_dir
и
--innodb_undo_directory
, если каталоги отличаются
от каталога данных.
Используйте, например, команду
copy-back-and-apply-log
, которая преобразовывает сырую
резервную копию в подготовленную резервную копию, обновляя ее к
последовательному статусу, а затем копирует таблицы, индексы, метаданные и
любые другие необходимые файлы на целевой сервер. Для различных опций,
которые можно определить для этой операции, посмотрите
раздел 19.3.
В примере ниже единственное резервное копирование файлов, созданное в
примере, данном в разделе 4.2.2,
восстановлено, используя команду
copy-back-and-apply-log
. Следующие опции используются:
--datadir
задает местоположение каталога данных для восстановления данных.
Необходимо определить это для любой операции восстановления
в командной строке или в файле по умолчанию.
--backup-image
обеспечивает путь к резервной копии файлов.
--backup-dir
обеспечивает местоположение пустого каталога, чтобы хранить некоторые
временные файлы, созданные во время восстановления.
$ mysqlbackup --datadir=/home/admin/bin/mysql-commercial-8.0.16/datadir \ --backup-image=/home/mysqlbackup/backups/my.mbi \ --backup-dir=/home/mysqlbackup/backup-tmp \ copy-back-and-apply-log MySQL Enterprise BackupVer 8.0.16-commercial for linux-glibc2.12 on x86_64 (MySQL Enterprise - Commercial) Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Starting with following command line ... mysqlbackup --datadir=/home/admin/bin/mysql-commercial-8.0.16/datadir --backup-image=/home/mysqlbackup/backups/my.mbi --backup-dir=/home/mysqlbackup/backup-tmp copy-back-and-apply-log IMPORTANT: Please check that mysqlbackup run completes successfully. At the end of a successful 'copy-back-and-apply-log' run mysqlbackup prints "mysqlbackup completed OK!". 190402 16:56:37 MAININFO: Starting to log actions. 190402 16:56:37 MAININFO: Backup directory exists: '/home/mysqlbackup/backup-tmp' 190402 16:56:37 MAININFO: Backup Image MEB version string: 8.0.16 [2019-03-2618:51:33] 190402 16:56:37 MAININFO: MySQL server version is '8.0.16' 190402 16:56:37 MAIN WARNING: If you restore to a server of a different version, the innodb_data_file_path parameter might have a different default. In that case you need to add 'innodb_data_file_path=ibdata1:12M:autoextend' to the target server configuration. 190402 16:56:37 MAIN WARNING: If you restore to a server of a different version, the innodb_log_files_in_group parameter might have a different default. In that case you need to add 'innodb_log_files_in_group=2' to the target server configuration. 190402 16:56:37 MAIN WARNING: If you restore to a server of a different version, the innodb_log_file_size parameter might have a different default. In that case you need to add 'innodb_log_file_size=50331648' to the target server configuration. 190402 16:56:37 MAININFO: Server is not a community server. 190402 16:56:37 MAININFO: KEF source path: '/home/mysqlbackup/backup-tmp/meta/keyring_kef' 190402 16:56:37 MAININFO: KEF target path: '/home/admin/bin/mysql-commercial-8.0.16/datadir/keyring_kef' 190402 16:56:37 MAININFO: TDE Keyring service initialized. 190402 16:56:37 MAININFO: MEB logfile created at /home/mysqlbackup/backup-tmp/meta/MEB_2019-04-02.16-56-37_copy_back_img_to_datadir.log -------------------------------------------------------------------- Server Repository Options: -------------------------------------------------------------------- datadir= /home/admin/bin/mysql-commercial-8.0.16/datadir innodb_data_home_dir = /home/admin/bin/mysql-commercial-8.0.16/datadir innodb_data_file_path= ibdata1:12M:autoextend innodb_log_group_home_dir= /home/admin/bin/mysql-commercial-8.0.16/datadir innodb_log_files_in_group= 2 innodb_log_file_size = 50331648 innodb_undo_directory= /home/admin/bin/mysql-commercial-8.0.16/datadir innodb_undo_tablespaces= 2 innodb_buffer_pool_filename= ib_buffer_pool innodb_page_size = Null innodb_checksum_algorithm= crc32 -------------------------------------------------------------------- Backup Config Options: -------------------------------------------------------------------- datadir= /home/mysqlbackup/backup-tmp/datadir innodb_data_home_dir = /home/mysqlbackup/backup-tmp/datadir innodb_data_file_path= ibdata1:12M:autoextend innodb_log_group_home_dir= /home/mysqlbackup/backup-tmp/datadir innodb_log_files_in_group= 2 innodb_log_file_size = 50331648 innodb_undo_directory= /home/mysqlbackup/backup-tmp/datadir innodb_undo_tablespaces= 2 innodb_buffer_pool_filename= ib_buffer_pool innodb_page_size = 16384 innodb_checksum_algorithm= crc32 190402 16:56:37 MAININFO: Creating 14 buffers each of size 16777216. 190402 16:56:37 MAININFO: Copy-back-and-apply-log operation starts with following threads 1 read-threads6 process-threads1 write-threads 190402 16:56:37 PCR1INFO: Copying database directory: meta 190402 16:56:37 RDR1INFO: Copying ibdata1. 190402 16:56:37 RDR1INFO: Copying undo_002. 190402 16:56:37 RDR1INFO: Copying undo_001. 190402 16:56:37 RDR1INFO: Copying sys/sys_config.ibd. 190402 16:56:37 RDR1INFO: Copying pets/cats.ibd. 190402 16:56:37 RDR1INFO: Copying mysql/backup_history.ibd. 190402 16:56:37 RDR1INFO: Copying mysql.ibd. 190402 16:56:37 RDR1INFO: Copying binlog.000001. 190402 16:56:37 RDR1INFO: Copying binlog.000002. 190402 16:56:37 RDR1INFO: Copying binlog.000003. 190402 16:56:37 PCR3INFO: Copying database directory: mysql 190402 16:56:37 PCR3INFO: Copying database directory: performance_schema 190402 16:56:37 PCR3INFO: Copying database directory: pets 190402 16:56:37 PCR3INFO: Copying database directory: sys 190402 16:56:37 RDR1INFO: Copying binlog.000004. 190402 16:56:37 MAININFO: Total files as specified in image: 138 190402 16:56:37 MAININFO: MySQL server version is '8.0.16-commercial' 190402 16:56:37 MAININFO: Restoring ...8.0.16-commercial version 190402 16:56:37 MAININFO: Copy-back operation completed successfully. 190402 16:56:37 MAININFO: Source Image Path = /home/mysqlbackup/backups/my.mbi 190402 16:56:37 MAININFO: MySQL server version is '8.0.16-commercial' 190402 16:56:37 MAININFO: Restoring ...8.0.16-commercial version 190402 16:56:37 MAININFO: Creating 14 buffers each of size 65536. 190402 16:56:37 MAININFO: Apply-log operation starts with following threads 1 read-threads1 process-threads6 apply-threads 190402 16:56:37 MAININFO: Using up to 100 MB of memory. 190402 16:56:37 MAININFO: ibbackup_logfile's creation parameters: start lsn 19841024, end lsn 19841405, start checkpoint 19841405. 190402 16:56:37 MAININFO: Loading the space id : 0, space name : /home/admin/bin/mysql-commercial-8.0.16/datadir/ibdata1. 190402 16:56:37 MAININFO: Apply log: Loading the undo space id : 4294967278, space name : /home/admin/bin/mysql-commercial-8.0.16/datadir/undo_002. 190402 16:56:37 MAININFO: Apply log: Loading the undo space id : 4294967279, space name : /home/admin/bin/mysql-commercial-8.0.16/datadir/undo_001. 190402 16:56:37 MAININFO: Loading the space id : 3, space name : /home/admin/bin/mysql-commercial-8.0.16/datadir/mysql/backup_history.ibd. 190402 16:56:37 MAININFO: Loading the space id : 2, space name : /home/admin/bin/mysql-commercial-8.0.16/datadir/pets/cats.ibd. 190402 16:56:37 MAININFO: Loading the space id : 1, space name : /home/admin/bin/mysql-commercial-8.0.16/datadir/sys/sys_config.ibd. 190402 16:56:37 MAININFO: Loading the space id : 4294967294, space name : /home/admin/bin/mysql-commercial-8.0.16/datadir/mysql.ibd. 190402 16:56:37 PCR1INFO: Starting to parse redo log at lsn = 19841394, whereas checkpoint_lsn = 19841405. 190402 16:56:37 PCR1INFO: Doing recovery: scanned up to log sequence number 19841405. 190402 16:56:37 PCR1INFO: Starting to apply a batch of log records to the database.... InnoDB: Progress in percent: 190402 16:56:37 PCR1INFO: Updating last checkpoint to 19841405 in redo log/ 190402 16:56:37 PCR1INFO: Setting log file size to 50331648 190402 16:56:37 PCR1INFO: Setting log file size to 50331648 190402 16:56:37 PCR1INFO: Log file header: format = 3 pad1 = 0 start lsn = 19841024 checkpoint lsn = 19841405 checksum = 2051460933 creator = MEB 8.0.16 190402 16:56:37 PCR1INFO: We were able to parse ibbackup_logfile up to lsn 19841405. 190402 16:56:37 PCR1INFO: Last MySQL binlog file position 0 379, file name binlog.000004 190402 16:56:37 PCR1INFO: The first data file is '/home/admin/bin/mysql-commercial-8.0.16/datadir/ibdata1' and the new created log files are at '/home/admin/bin/mysql-commercial-8.0.16/datadir' 190402 16:56:37 MAININFO: No Keyring file to process. 190402 16:56:37 MAININFO: Apply-log operation completed successfully. 190402 16:56:37 MAININFO: Full Backup has been restored successfully. mysqlbackup completed OK! with 3 warnings
Теперь оригинальный каталог базы данных восстановлен из резервной копии.
Старт восстановленного сервера. Когда следующие параметры настройки InnoDB отличаются на поддерживаемом и восстановленном сервере, важно сформировать восстановленный сервер с параметрами настройки от поддержанного сервера (иначе, ваш восстановленный сервер не может запуститься):
Если вы не уверены в тех параметрах настройки для вашего поддержанного
сервера, они были на самом деле сохранены в файле
backup-my.cnf
во время резервной копии,
можно найти файл во временном каталоге, который вы определили с
--backup-dir
,
когда вы восстановили образ резервной копии, или в резервном каталоге,
который вы могли создать, распаковав образ резервной копии, используя
команду extract
.
Если значения этих опций отличаются от их значений в целевом сервере,
добавьте их к конфигурационному файлу, который вы используете, чтобы
запустить целевой сервер впоследствии, альтернативно можно также передать их
как параметры командной строки mysqld.
В зависимости от того, как вы собираетесь запустить
восстановленный сервер, вы, возможно, должны были бы приспособить значение
собственность восстановленного каталога данных. Например, если сервер будет
запущен пользователем mysql
, используйте следующую команду,
чтобы изменить признак владельца каталога данных и файлов под ним к
mysql
и атрибут группы к mysql
.
$ chown -R mysql:mysql /path/to/datadir
Вы теперь готовы запустить восстановленный сервер базы данных. Для большего количества обсуждений того, как выполнить различные варианты восстановления, посмотрите раздел 5.1.
Чтобы избежать получения большого количества резервных файлов, чтобы отслеживать, сохранить и транспортировать, mysqlbackup удобно создает резервные копии в единственном файле. Это может также упаковать существующий резервный каталог в единственный файл, распаковать единственный файл назад к резервному каталогу, перечислить содержание резервной копии, проверить содержание единственного резервного файла по вложенным контрольным суммам или извлечь единственный файл в дерево каталогов. Для синтаксиса соответствующих опций mysqlbackup см. раздел 20.9.
Дополнительно: В то время как
mysqlbackup
может также создать директивную резервную копию (см. описание команды
backup
)
вместо однофайловой резервной копии, однофайловый формат предпочтителен в
большинстве случаев: с ним легче обращаться и определенные функции
mysqlbackup
не поддерживаются для директивных резервных копий,
например, резервная копия в облако или на ленту с использованием System
Backup to Tape (SBT) API. Всюду по руководству директивную резервную копию
главным образом рассматривают как продвинутую тему, информация и примеры для
директивных резервных копий отмечены тэгом
дополнительно, как этот параграф.
Поскольку резервное копирование файлов может передаваться по каналу к другому процессу, такому как резервное копирование на магнитную ленту или команда, можно использовать технику, чтобы поместить резервную копию на другое устройство хранения данных или сервер и избежать значительных издержек хранения на оригинальном сервере базы данных.
Чтобы создать резервное копирование файлов, используйте команду
backup-to-image
. Следующие примеры иллюстрируют, как выполнить резервное копирование
файлов и другие связанные операции.
Пример 4.1. Резервное копирование файлов в абсолютный путь
Эта команда создает единственный образ резервной копии на данном
абсолютном пути. Это все еще требует --backup-dir
,
который используется, чтобы хранить временный вывод,
статус и файлы метаданных.
mysqlbackup --defaults-file=/home/dbadmin/my.cnf \ --backup-image=/backups/sales.mbi --backup-dir=/backup-tmp \ backup-to-image
Пример 4.2. Резервное копирование файлов в относительный путь
Когда относительный путь вместо абсолютного пути поставлялся опцией
--backup-image
, путь взят относительно
резервного каталога.
Поэтому в этом примере получающееся резервное копирование файлов создается
как /backups/sales.mbi
.
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --backup-image=sales.mbi \ --backup-dir=/backups backup-to-image
Пример 4.3. Резервное копирование файлов на стандартный вывод
Следующая команда сбрасывает вывод на стандартный вывод.
Каталог, определенный с опцией --backup-dir
,
используется в качестве временного каталога.
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --backup-dir=/backups \ --backup-image=- backup-to-image > /backup/mybackup.mbi
Пример 4.4. Преобразовывает существующий резервный каталог в единственный образ
Каталог backup-dir
архивирован в файл
/backup/my.mbi
.
mysqlbackup --backup-image=/backup/my.mbi --backup-dir=/var/mysql/backup \ backup-dir-to-image
Пример 4.5. Извлекает существующий образ, чтобы сделать копию каталога
Содержимое образа распаковано в
backup-dir
.
mysqlbackup --backup-dir=/var/backup --backup-image=/backup/my.mbi \ image-to-backup-dir
Пример 4.6. Список файлов из резервной копии
Содержимое образа перечисляется в текстовом виде. Каждая строка указывает на запись файла или каталога.
mysqlbackup --backup-image=/backup/my.mbi list-image
Пример 4.7. Проверка резервного копирования файлов
Следующая команда проверяет, что резервное копирование файлов не испорчено, не усечено и не повреждено, сверяя значение контрольной суммы для каждой страницы данных в резервной копии.
mysqlbackup --backup-image=/logs/fullimage.mivalidate
Пример 4.8. Извлечение резервной копии файлов в текущий каталог
Следующая команда извлекает все содержание из однофайловой резервной копии файлов в текущий рабочий каталог.
mysqlbackup --backup-image=/var/my.mbi extract
Пример 4.9. Извлечение резервной копии файлов в резервный каталог
Следующая команда извлекает все содержание из однофайловой резервной
копии файлов в каталог, заданный опцией --backup-dir
.
mysqlbackup --backup-image=/var/my.mbi --backup-dir=/var/backup extract
Пример 4.10. Выборочная распаковка
Да, так можно! Следующая команда извлекает единственный файл
meta/comments.txt
из образа резервной копии
my.mbi
в локальный путь
./meta/comments.txt
.
mysqlbackup --backup-image=/var/my.mbi \ --src-entry=meta/comments.txt extract
Следующая команда извлекает файл
meta/comments.txt
из образа резервной копии
my.mbi
в указанный путь
/tmp/mycomments.txt
с помощью опции
--dst-entry
.
mysqlbackup --backup-image=/var/my.mbi \ --src-entry=meta/comments.txt \ --dst-entry=/tmp/mycomments.txt extract
Следующая команда сбрасывает содержание
meta/comments.txt
(из файла резервной копии
my.mbi
) на стандартный вывод.
mysqlbackup --backup-image=/var/my.mbi --src-entry=meta/comments.txt \ --dst-entry=- extract
Пример 4.11. Выборочное извлечение единственного каталога
Следующая команда извлекает единственный каталог
meta
из образа резервной копии
my.mbi
в путь локальной файловой системы
./meta
. Все содержание каталога
meta
извлечено, включая любые подкаталоги.
Заметьте слэш (/
) в конце значения meta/
для
--src-entry
,
без которого все файлы или каталоги, содержащие последовательность
meta
в их путях, будут извлечены.
mysqlbackup --backup-image=/backup/my.mbi --src-entry=meta/ extract
Пример 4.12. Работа с абсолютными путями
Так как абсолютные пути извлечены к тем же самым путям в местной системе, это могло быть проблемой, если вы не имеете разрешение на запись для этого пути. Можно переотобразить абсолютные пути следующим образом:
mysqlbackup --backup-image=/backup/my.mbi --src-entry=/ \ --dst-entry=/myroot extract mysqlbackup --backup-image=/backup/my.mbi --src-entry=. extract
Первая команда извлекает все абсолютные пути к каталогу
/myroot
в местной системе.
Вторая команда извлекает все относительные пути к текущему каталогу.
Чтобы ограничить издержки хранения на сервере базы данных, можно передать
данные резервного копирования иному серверу, никогда не храня их в местном
масштабе. Можно достигнуть этого с однофайловым резервным копированием.
Чтобы послать резервную копию файлов в стандартный вывод, используйте команду
backup-to-image
без опции --backup-image
.
Можно также определить --backup-image=-
, чтобы
сделать очевидным то, что данные посылают в stdout.
Чтобы передать данные, вы используете резервное копирование файлов в
сочетании с особенностями операционной системы, такими как каналы,
ssh
или что-то вроде этого, которые берут запись от стандартного
вывода и создают эквивалентный файл в удаленной системе. Можно сохранить
резервную копию файлов непосредственно в удаленной системе или вызвать с
командой copy-back-and-apply-log
на другом конце, чтобы вернуть
резервную копию удаленному серверу MySQL.
Пример 4.13. Резервное копирование файлов на удаленный хост
Следующая команда передает резервную копию как вывод удаленному хосту,
чтобы записать под именем файла
my_backup.img
(--backup-dir=/tmp
определяет каталог для того, чтобы хранить
временные файлы, а не файл окончательного результата):
mysqlbackup --defaults-file=~/my_backup.cnf --backup-image=- \ --backup-dir=/tmp backup-to-image | \ ssh<user name>
@<remote host name>
\ 'cat > ~/backups/my_backup.img'
Для простоты вся связь и другие необходимые опции, как предполагается,
определяются в конфигурационном файле по умолчанию.
ssh
может быть заменен другим протоколом связи, например,
ftp
, cat
может быть заменена другой командой
(например, dd или
tar для нормального архивирования).
Пример 4.14. Резервное копирование файлов на удаленный сервер MySQL
Следующая команда передает резервную копию как единственный резервный файл, который будет восстановлен на удаленном сервере MySQL:
mysqlbackup--backup-dir=backup --backup-image=---compress backup-to-image | \ ssh<user name>
@<remote host name>
\ 'mysqlbackup --backup-dir=backup_tmp --datadir=/data \ --innodb_log_group_home_dir=. --uncompress --backup-image=- \ copy-back-and-apply-log'
Пример 4.15. Передача резервного каталога удаленному серверу MySQL
Следующая команда передает резервный каталог как единственный резервный файл, который будет восстановлен на удаленном сервере MySQL:
mysqlbackup --backup-image=- --backup-dir=/path/to/my/backup \ backup-dir-to-image | \ ssh<user name>
@<remote host name>
\ 'mysqlbackup --backup-dir=backup_tmp --datadir=/data --backup-image=- \ copy-back-and-apply-log'
Лентопротяжные устройства это доступные устройства хранения данных большой емкости для данных резервного копирования. MySQL Enterprise Backup может взаимодействовать с программным обеспечением управления (MMS), например, Oracle Secure Backup (OSB) для резервирования и восстановления. Программное обеспечение управления должно поддерживать интерфейс System Backup To Tape (SBT) Version 2 или выше.
Для получения информации о выполнении резервных копирований на магнитную ленту в сочетании с продуктами MMS, такими как Oracle Secure Backup, см. главу 11.
MySQL Enterprise Backup поддерживает облачное резервирование. Только однофайловое резервное копирование может быть создано и восстановлено от облачного хранилища. Все опции mysqlbackup, совместимые с операциями единственного файла (включая, например, incremental, compression, partial и encryption), могут использоваться с облачными резервными копиями.
См. приложение B для некоторых ограничений относительно поддержки облачного хранилища mysqlbackup.
MySQL Enterprise Backup понимает следующие типы облачных хранилищ:
Oracle Cloud Infrastructure (OCI) Object Storage.
OpenStack Swift или совместимые услуги хранения объектов.
Amazon Simple Storage Service (S3) или совместимые услуги хранения объектов.
GCP object storage.
Облачная резервная копия создается, используя возможности облака для mysqlbackup, которые детально описаны в разделе 20.15. Вот некоторые типовые команды для создания облачной резервной копии:
Пример 4.16. Создания облачной резервной копии на Oracle Cloud Infrastructure Object Storage
Этот пример создает облачную резервную копию в Oracle Cloud Infrastructure (OCI) Object Storage, используя Pre-Authenticated Request (PAR) URL.
mysqlbackup --defaults-file=/home/dbadmin/my.cnf \
--backup-dir=/home/dbadmin/backuptmp \
--with-timestamp --backup-image=- --cloud-service=OCI \
--cloud-par-url=<bucket_PAR_URL>
\
--cloud-object=backup.bk backup-to-image
Пример 4.17. Создания инкрементного облачного резервного копирования в Oracle Cloud Infrastructure
Этот пример создает возрастающую облачную резервную копию в Oracle Cloud Infrastructure (OCI) Object Storage с применением Pre-Authenticated Request (PAR) URL.
mysqlbackup --defaults-file=/home/dbadmin/my.cnf \
--backup-dir=/home/dbadmin/backuptmp --with-timestamp \
--backup-image=- --cloud-service=OCI \
--cloud-par-url=<bucket_PAR_URL>
--cloud-object=backup-inc.bk \
--incremental --incremental-base=history:last_backup \
backup-to-image
Пример 4.18. Создание облачной резервной копии на OpenStack
Этот пример создает облачную резервную копию на OpenStack, используя сервис Keystone identity service, чтобы подтвердить подлинность учетных данных пользователя.mysqlbackup --defaults-file=/home/dbadmin/my.cnf \ --include-tables=testdb.t1 --use-tts=with-full-locking \ --cloud-service=openstack--cloud-container=<swift container>
\ --cloud-user-id=<keystone user>
\ --cloud-password=<keystone password>
\ --cloud-region=<keystone region>
\ --cloud-tenant=<keystone tenant>
\ --cloud-identity-url=<keystone url>
\ --cloud-trace=1 --cloud-object=image_800.mbi \ --backup-dir=/home/dba/opbackuptmpdir \ --backup-image=- backup-to-image
Пример 4.19. Создание облачной резервной копии на Amazon S3 Bucket
Этот пример создает облачную резервную копию в Amazon S3 bucket.
mysqlbackup --defaults-file=/home/dbadmin/my.cnf \ --cloud-service=s3 --cloud-aws-region=<aws region>
\ --cloud-access-key-id=<aws access key id>
\ --cloud-secret-access-key=<aws secret access key>
\ --cloud-bucket=<s3 bucket name>
\ --cloud-object-key=<aws object key>
\ --backup-dir=/home/dba/s3backupdir --with-timestamp \ --backup-image=- backup-to-image
Пример 4.20. Создание инкрементного резервного копирования в облаке Amazon S3 Bucket
Этот пример создает инкрементное резервное копирование в облаке на Amazon S3 bucket.
mysqlbackup --defaults-file=/home/dbadmin/my.cnf \ --cloud-service=s3 --cloud-aws-region=<aws region>
\ --cloud-access-key-id=<aws access key id>
\ --cloud-secret-access-key=<aws secret access key>
\ --cloud-bucket=<s3 bucket name>
\ --cloud-object-key=<aws object key>
\ --backup-dir=/home/dba/s3backupdir --with-timestamp \ --backup-image=- --incremental \ --incremental-base=history:last_backup backup-to-image
Пример 4.21. Создание облачной резервной копии в GCP Storage Service
Этот пример создает облачную резервную копию в GCP storage service.
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --cloud-service=GCP \ --cloud-bucket=<bucket name>
\ --cloud-object=<object name>
\ --cloud-access-key=<access name>
\ --cloud-secret-key=<secret key>
\ --backup-dir=/home/dba/backupdir --with-timestamp \ --backup-image=- backup-to-image
Облачная резервная копия всегда использует один поток записи.
Кроме того,
backup-to-image
, все другие операции
mysqlbackup
для однофайлового резервного копирования
(
backup-dir-to-image
,
list-image
,
validate
,
image-to-backup-dir
,
extract
,
copy-back
и
copy-back-and-apply-log
) также могут быть выполнены с
облачным хранилищем (см. приложение B
для некоторых ограничений).
См. раздел 5.2 о том, как восстановить образ резервной копии из облачного хранилища.
Большинство стратегий резервного копирования начинается с полной резервной копии сервера MySQL, из которой можно восстановить все базы данных и таблицы. После того, как вы создали полное резервное копирование, вы могли бы выполнить возрастающие резервные копии (которые меньше и быстрее) для следующих нескольких резервных задач. Вы делаете полное резервное копирование периодически, чтобы начать цикл снова.
Для типовых команд для того, чтобы сделать полное резервное копирование, посмотрите раздел 4.2.2.
Эта секция обрисовывает в общих чертах некоторые вещи, которые надо рассмотреть, выбирая стратегию создания полного резервного копирования. Как мы будем видеть, такие факторы как скорость и удобство важны для ваших решений.
Для ясности примеры в этом руководстве часто показывают некоторые
параметры командной строки, которые используются с командами
mysqlbackup. Для удобства и последовательности
можно включить те варианты, которые остаются неизменными для большинства
заданий резервного копирования в секцию [mysqlbackup]
конфигурационного файла MySQL, который вы поставляете
mysqlbackup.
mysqlbackup также берет опции из секции
[mysqld]
, если они присутствуют там. Помещение вариантов в
конфигурационный файл может упростить управление, например, помещая
информацию о порте в конфигурационный файл, можно избежать потребности
редактировать скрипты каждый раз, когда экземпляр базы данных переключается
на иной порт. См. главу 21 для получения
дополнительной информации об использовании конфигурационных файлов.
Для удобства опция
--with-timestamp
создает исключительно подкаталоги, названные в
соответствии с резервным
каталогом, чтобы хранить данные резервного копирования (постоянные или
временные) и метаданные. Подкаталоги с меткой времени делают более простым
установку периодов хранения, позволяя легкое удаление и архивацию данных
резервного копирования, которые превысили определенный возраст.
Если вы действительно используете единственный резервный каталог (то есть,
если вы опускаете опцию --with-timestamp
), определите новое
уникальное имя каталога для каждого задания резервного копирования.
Для возрастающих резервных копий, которые используют опцию
--incremental-base
, чтобы определить каталог, содержащий
предыдущую резервную копию, чтобы сделать имена каталогов предсказуемыми, вы
могли бы предпочесть не использовать опцию
--with-timestamp
и производить последовательность имен каталогов
вашим скриптом резервирования вместо этого.
Если ваш объем данных InnoDB небольшой или если ваша база данных так занята, что высокий процент данных изменяется между резервными копиями, вы могли бы хотеть делать полное резервное копирование каждый раз. Однако, можно обычно сэкономить время и память, делая полное резервное копирование, а затем несколько возрастающих промежуточных резервных копий, как описано в разделе 4.3.3.
Создание сжатой резервной копии может сэкономить вам значительное место и уменьшить использование I/O. С методом сжатия LZ4 издержки обработки сжатия довольно низкие. В случаях, когда резервные копии базы данных перемещаются от более быстрой дисковой системы, где активные файлы базы данных находятся, к возможно более медленному хранилищу, сжатие будет часто значительно ниже полного времени резервного копирования. Это может закончиться уменьшением времени восстановления. В целом мы рекомендуем сжатие LZ4 для большинства пользователей, поскольку основанные на LZ4 резервные копии часто делаются быстрее. Однако, проверьте MySQL Enterprise Backup в своей среде, чтобы определить то, что является самым эффективным подходом. Для большего количества обсуждений сжатых резервных копий посмотрите раздел 4.3.4.
Если объем данных по вашему серверу MySQL остается неизменным со временем, можно увеличить скорость и уменьшить необходимое место в памяти для регулярных резервных копий, поддержав не все данные сервера каждый раз, а только изменения данных, которые происходили со временем. Для этого после создания сначала полного резервного копирования, которое содержит все данные, можно сделать одно из следующего:
Выполнение дифференциального резервного копирования.
Каждое дифференциальное
резервное копирование включает все изменения, внесенные в данные, начиная
с последнего полного резервного копирования. Чтобы восстановить данные до,
например, времени t
, вы просто восстанавливаете сначала полное
резервное копирование, затем поверх него дифференциальное резервное
копирование, взятое в течение времени t
.
Выполните серию инкрементных резервных копий
Каждая инкрементная резервная
копия включает только изменения начиная с предыдущей резервной копии,
которая самостоятельно может быть полным резервным копированием или
инкрементным резервным копированием. Первая резервная копия в возрастающем
ряду это всегда дифференциальное резервное копирование, но после этого каждая
инкрементная резервная копия содержит только изменения, внесенные начиная с
того последнего инкрементного резервного копирования.
Каждое последующее инкрементное резервное копирование таким образом обычно
меньше в размере, чем дифференциальное резервное копирование и быстрее,
это позволяет вам делать очень частые возрастающие резервные копии, а затем
позволяет вам вернуть базу данных более точному моменту времени при
необходимости. Однако восстановление данных с возрастающими резервными
копиями могло бы занять больше времени и больше работы:
в целом, чтобы восстановить данные до, например, времени t
,
вы начинаете с восстановления полного резервного копирования, затем
восстанавливаете возрастающие резервные копии по порядку,
пока не дойдете до инкрементной резервной копии, взятой в течение времени t.
MySQL Enterprise Backup понимает возрастающее и дифференциальное резервное копирование. Необходимо выбрать, какую стратегию резервного копирования принять, смотря на такие факторы как то, сколько памяти вы имеете, как быстро необходимо быть в состоянии восстановить данные и так далее.
MySQL Enterprise Backup рассматривает дифференциальное резервное копирование как особый случай инкрементного резервного копирования, у которого есть полное резервное копирование как его основа. Чтобы создать дифференциальное резервное копирование, просто следуйте инструкциям ниже для выполнения возрастающих резервных копий и удостоверьтесь, что вы определяете полное резервное копирование как основу вашего инкрементного резервного копирования, необходимо также проигнорировать любые инструкции, которые относятся только к обработке многочисленных возрастающих резервных копий.
MySQL Enterprise Backup 8.0.17 и позже
: можно создать дифференциальное резервное копирование, используя
опцию
--incremental-base=history:last_full_backup
.
См. раздел 20.7
для описаний опций mysqlbackup, используемых
для возрастающих резервных копий. Инкрементное резервное копирование
позволено с одним из этих двух вариантов:
--incremental
и
--incremental-with-redo-log-only
. См.
здесь
описание их различий.
Создавая инкрементное резервное копирование, необходимо указать
mysqlbackup на момент времени предыдущего
полного резервного копирования или инкрементного резервного копирования.
Для удобства можно использовать опцию
--incremental-base
, чтобы автоматически получить необходимый
log sequence number (LSN)
из метаданных, сохраненных в предыдущем резервном каталоге или на сервере.
Или можно определить явное значение LSN, используя параметр
--start-lsn
,
предоставляя mysqlbackup последний LSN из
предыдущего полного резервного копирования или инкрементного резервного
копирования (см.
ограничения, которые применяются, используя опцию
--start-lsn
).
Чтобы подготовить данные резервного копирования, которые будут восстановлены, вы объединяете все возрастающие резервные копии с оригинальным полным резервным копированием. Как правило, вы выполняете новое полное резервное копирование после определенного промежутка времени, после которого можно отказаться от более старых данных об инкрементном резервном копировании.
Опция
--incremental-with-redo-log-only
может предложить некоторые выгоды по сравнению с
--incremental
для создания инкрементного резервного копирования:
Изменения таблиц InnoDB определяются на основе содержания
журнала отката InnoDB
.
Так как у файлов журнала отката есть фиксированный размер, который вы знаете
заранее, он может потребовать меньше I/O, чтобы прочитать изменения из них,
чем просмотр файлов табличного пространства InnoDB, чтобы определить
местонахождение измененных страниц, в зависимости от размера вашей базы
данных, объема деятельности DML и размера файлов журнала отката.
Файлы журнала отката работают как кольцевой буфер с более старыми
изменениями, переписываемыми по мере того, как происходят новые операции
DML. Поэтому необходимо взять новые возрастающие резервные
копии по предсказуемому графику, продиктованному размером файлов журнала
и размером данных, произведенных для рабочей нагрузки.
Иначе журнал отката не мог бы уйти назад достаточно далеко, чтобы сделать
запись всех изменений с предыдущего инкрементного резервного копирования,
в этом случае mysqlbackup
решит, что не может продолжать и возвратит ошибку.
Ваш резервный сценарий должен быть в состоянии зафиксировать эту ошибку и
затем выполнить инкрементное резервное копирование с опцией
--incremental
.
Например, вот так:
Чтобы вычислить размер журнала отката, дайте команду
SHOW VARIABLES LIKE 'innodb_log_file%'
и на основе ее вывода, увеличьте
innodb_log_file_size
значением
innodb_log_files_in_group
.
Чтобы вычислить размер журнала отката на физическом уровне, изучите каталог
datadir
MySQL и сложите размеры файлов, соответствующих образцу
ib_logfile*
.
Значение InnoDB LSN
соответствует числу байтов, написанных в журнал отката.
Чтобы проверить LSN в какой-то момент времени, дайте команду
SHOW ENGINE INNODB STATUS
и посмотрите заголовок LOG
.
Планируя вашу стратегию резервного копирования, делайте запись значений LSN
периодически и вычитайте более раннее из текущего, чтобы вычислить, сколько
данных производится каждый час, день и так далее.
Этот тип инкрементного резервного копирования не настолько
игнорирует низкие значения
--start-lsn
как обычная опция --incremental
. Например, вы не можете сделать
полное резервное копирование и затем сделать серию резервных копий
--incremental-with-redo-log-only
с использованием того же самого
значения --start-lsn
. Удостоверьтесь, что определили точный
конец LSN предыдущей резервной копии как начало LSN следующего инкрементного
резервного копирования, не используйте произвольные значения.
Чтобы гарантировать, что значения LSN совпадают точно между
последовательными возрастающими резервными копиями, рекомендуется, чтобы вы
всегда использовали опцию
--incremental-base
, когда вы используете опцию
--incremental-with-redo-log-only
.
Чтобы определить, практичен ли этот тип инкрементного резервного копирования и эффективен ли он для конкретного случая MySQL:
Измерьте, как быстро данные изменяются в файлах журнала отката InnoDB. Проверьте периодически LSN, чтобы решить, сколько данных накапливается в течение некоторого числа часов или дней.
Сравните темп накопления журнала отката с размером файлов журнала отката. Используйте это отношение, чтобы видеть, как часто взять инкрементное резервное копирование, чтобы избежать вероятности провала резервной копии, потому что исторические данные недоступны в журнале отката. Например, если вы производите 1 ГБ данных журнала отката в день и объединенный размер ваших файлов журнала отката составляет 7 ГБ, вы намечали бы возрастающие резервные копии более часто, чем один раз в неделю. Вы могли бы выполнять возрастающие резервные копии каждый день или два, чтобы избежать потенциальной проблемы, когда внезапный всплеск обновлений произвел больше данных журнала отката, чем обычно.
Определите эффективность времени
инкрементного резервного копирования, используя опции
--incremental
и
--incremental-with-redo-log-only
, чтобы подтвердить, работает ли
метод резервной копии журнала отката быстрее и с меньшими издержками, чем
традиционный метод инкрементного резервного копирования.
Результат может зависеть от размера ваших данных, объема деятельности DML и
размера ваших файлов журнала отката. Сделайте свое тестирование на сервере с
реалистическим объемом данных и реалистической рабочей нагрузкой.
Например, если у вас есть огромные файлы журнала отката,
их чтение в ходе инкрементного резервного копирования могло бы занять
больше времени, чем чтение файлов данных InnoDB, используя традиционную
возрастающую технику. С другой стороны, если ваш объем данных большой, читать
все файлы данных, чтобы найти несколько измененных страниц,
могло бы быть менее эффективным, чем обработка намного меньших
файлов журнала отката.
Резервное сжатие (то есть использование
опций сжатия)
не поддерживается, когда вы выполняете возрастающие резервные копии только с
журналом отката. Если резервное сжатие важно для вас, не используйте опцию
--incremental-with-redo-log-only
.
For MySQL Enterprise Backup 8.0.18 и выше: mysqlbackup понимает создание возрастающих резервных копий, используя функциональность отслеживания страницы MySQL Server, которой mysqlbackup ищет измененные страницы в файлах данных InnoDB, которые были изменены, начиная с последней резервной копии и затем копирует их. В целом возрастающие резервные копии, используя отслеживание страницы быстрее, чем другие виды возрастающих резервных копий, выполненных mysqlbackup, если большинство данных в базе данных не было изменено. Использование этой функции требует, чтобы следующее было сделано на сервере, прежде чем основная резервная копия для инкрементного резервного копирования будет сделана:
Установите компонент mysqlbackup
,
который идет с MySQL Enterprise Server 8.0, этой командой в
mysql:
INSTALL COMPONENT "file://component_mysqlbackup";
Начните отслеживание страницы со следующей определенной пользователями функцией (UDF):
SELECT mysqlbackup_page_track_set(true);
Значение LSN, начиная с которого были прослежены измененные страницы, возвращено этой UDF:
SELECT mysqlbackup_page_track_get_start_lsn();
Можно остановить отслеживание страницы со следующим UDF:
SELECT mysqlbackup_page_track_set(false);
Вышеупомянутые UDF для отслеживания страницы
требуют привилегии BACKUP_ADMIN
.
Когда опция
--incremental
используется без любого определенного значения,
mysqlbackup выполняет инкрементное резервное
копирование, используя функциональность отслеживания страницы.
Пользователь может также определять
--incremental=page-track
, чтобы заставить
mysqlbackup использовать функциональность
отслеживания страницы. Однако, для использования функциональности
отслеживания страницы для возрастающих резервных копий нужно
соответствовать ряду требований:
Отслеживание страницы функционирует правильно на сервере, и это
было позволено (с помощью SELECT
mysqlbackup_page_track_set(true)
) прежде, чем основная резервная копия
была создана, если это не так mysqlbackup
бросает ошибку, когда
--incremental=page-track
, или выполняет инкрементное резервное копирование полного
просмотра вместо этого, когда не задана
--incremental
.
Число измененных страниц составляет меньше 50% общего количества
страниц, если это не так mysqlbackup
бросает ошибку, когда
--incremental=page-track
, или выполняет инкрементное резервное копирование полного
просмотра вместо этого, когда не задана
--incremental
.
mysqlbackup должен быть запущен с достаточной памятью, чтобы обработать все отслеженные страницы в памяти. Если недостаточно памяти, mysqlbackup бросает ошибку и затем завершается. Вот некоторые рекомендации для проверки наличия достаточной памяти для операции:
Значение по умолчанию 400 [MB] для опции
--limit-memory
позволяет mysqlbackup обрабатывать
приблизительно 800 ГБ измененных данных. Приспособьте значение опции
согласно вашему размеру данных.
Отслеживание страниц использует буферы памяти, формируемые для mysqlbackup для сортировки страниц. Определите количество буферов, необходимых для сортировки страницы:
Прежде, чем запустить резервирование, выполните следующий запрос
на сервере, чтобы определить end_lsn
для основной резервной копии:
SELECT end_lsn FROM mysql.backup_history WHERE exit_state = 'SUCCESS' AND backup_type != 'TTS' AND server_uuid = @@server_uuid ORDER BY end_time DESC, end_lsn DESC LIMIT 0,1;
Выполните такой запрос на сервере, чтобы получить число измененных страниц, с того момента, когда основная резервная копия была создана (повторите вопрос, если это возвращает отрицательную величину):
SELECT mysqlbackup_page_track_get_changed_page_count(<the above end_lsn>, 0);
Каждой измененной странице нужны 8 байтов в буфере сортировки.
Так что умножьте changed_page_count
, полученное на последнем
шаге, на 8, чтобы получить число байтов, необходимых
для буфера сортировки.
У каждого буфера есть предел в 16 мегабайтов (16777216 байтов). Так что разделите число байтов, необходимых для буферов сортировки, вычисленное на последнем шаге, на 16777216 и округлите результат до следующего целого числа, чтобы получить количество буферов, необходимых для сортировки.
Удостоверьтесь, что для опции
--number-of-buffers
не меньше, чем количество необходимых буферов
сортировки вычисленное на последнем шаге. Помните, что могут быть более
измененные страницы, созданные в то время, как вы делаете это вычисление,
таким образом, может быть надо дать mysqlbackup
еще несколько дополнительных буферов.
Предел памяти по умолчанию 400 МБ должен быть в состоянии поддержать
до 25 буферов (до 18 буферов только для облачных резервных копий),
увеличьте предел памяти, если вам нужно больше буферов, чем это, изменяя
значение
--limit-memory
.
Когда опция
--incremental
установлена в full-scan
,
mysqlbackup выполняет инкрементное резервное
копирование полного просмотра, в котором просматривает все файлы данных
InnoDB в каталоге данных сервера, чтобы найти страницы, которые были
изменены после того, как последняя резервная копия была сделана, а затем
копирует те страницы. Инкрементное резервное копирование полного просмотра не
может быть очень эффективным, если мало таблиц были
изменены с последнего резервирования.
Оптимистическое инкрементное резервное копирование, с другой стороны,
ищет только измененные страницы в файлах данных InnoDB, которые были
изменены, начиная с последней резервной копии, таким образом сэкономив
некоторое ненужное время просмотра. Оптимистическое инкрементное резервное
копирование может быть выполнено, определив
--incremental=optimistic
. В то время как оптимистическая резервная
копия могла бы сократить время резервного копирования, у нее
есть следующие ограничения:
Так как эта особенность использует время изменения файлов в каталоге данных сервера, две вещи должны оставаться неизменными, начиная с предыдущей резервной копии: (1) системное время на сервере и (2) местоположение каталога данных. Иначе резервная копия могла бы потерпеть неудачу или могло бы быть произведено непоследовательное инкрементное резервное копирование.
Оптимистические возрастающие резервные копии не могут быть выполнены с
--incremental-with-redo-log-only
, для которого
mysqlbackup читает файлы журнала отката вместо
того, чтобы просмотреть файлы в каталоге данных.
Если применена опция
--start-lsn
, полный просмотр выполняется, даже если определяется
--incremental=optimistic
, в этом случае mysqlbackup
не может определить момент времени, для которого предыдущая резервная копия
последовательна, и таким образом нет временной структуры, чтобы определить,
какие файлы были недавно изменены.
Для этих и других случаев, в которых оптимистическое инкрементное резервное копирование нежелательно, выполните инкрементное резервное копирование полного просмотра или инкрементное резервное копирование, используя отслеживание страницы (для MySQL Enterprise Backup 8.0.18 и позже). Посмотрите раздел 4.1.2 для привилегий, требуемых для mysqlbackup, чтобы выполнить оптимистическое инкрементное резервное копирование. Также посмотрите здесь о том, как использовать две особенности вместе в расписании резервного копирования.
For MySQL Enterprise Backup 8.0.17 и ранее
: резервная копия полного просмотра это метод по умолчанию для
возрастающих резервных копий, который используется, если никакое значение
не определяется для
--incremental
.
Особенность инкрементного резервного копирования, прежде всего предназначается для таблиц InnoDB или не-InnoDB таблиц, которые используются только для чтения или редко обновлены. Возрастающие резервные копии обнаруживают изменения на уровне страниц в файлах данных InnoDB в противоположность строкам таблицы, каждая страница, которая изменилась, резервируется целиком. Таким образом экономии пространства и времени не точно пропорциональны проценту измененных строк или колонок InnoDB.
Для не-InnoDB файлов весь файл всегда включается в инкрементное резервное копирование, это означает, что экономия ресурсов менее значительна, чем в случае с таблицами InnoDB.
Никакие двоичные файлы журнала не копируются в инкрементное резервное
копирование, если применена опция
the --start-lsn
.
Чтобы включать файлы двоичного журнала в течение периода, покрытого
инкрементным резервным копированием, используйте опцию
--incremental-base
, которая предоставляет необходимую информацию для
mysqlbackup, чтобы гарантировать, что никакой
промежуток не существует между данными, включенными в предыдущую резервную
копию и текущим инкрементным резервным копированием.
Эти примеры используют mysqlbackup,
чтобы сделать инкрементное резервное копирование сервера MySQL, включая все
базы данных и таблицы. Мы показываем две альтернативы: использование опции
--incremental-base
и опции
--start-lsn
.
С опцией --incremental-base
вы не должны отслеживать LSN
между одной резервной копией и следующей. Вместо этого можно сделать
одно из следующего:
Скажите mysqlbackup запросить
end_lsn
из последней успешной
резервной копии не-TTS, как
зарегистрировано в таблице backup_history
сервера, применив
--incremental-base
=history:last_backup
или
history:last_full_backup
(для 8.0.17 и позже).
Дополнительно:
Для директивных резервных копий определите каталог предыдущей резервной
копии (полной или возрастающей) с
--incremental-base=dir:
,
mysqlbackup
выяснит отправную точку для этой резервной копии на основе метаданных.
Поскольку вам нужен известный набор имен каталогов, вы могли бы хотеть
использовать жестко заданные имена или произвести последовательность имен в
вашем собственном резервном скрипте вместо того, чтобы использовать опцию
directory_path
--with-timestamp
. Если ваша последняя резервная копия была
однофайловой, можно использовать
--incremental-base=dir:
,
чтобы обеспечить местоположение временного каталога, заданного
directory_path
--backup-dir
во время последней резервной копии.
В следующем примере используется опция
--incremental-base=history:last_backup
, чтобы
mysqlbackup получил LSN последней
успешной (не-TTS) полной или частичной резервной копии из таблицы
mysql.backup_history
и выполнил инкрементное резервное копирование, базирующееся на этом.
mysqlbackup --defaults-file=/home/dbadmin/my.cnf \ --incremental --incremental-base=history:last_backup \ --backup-dir=/home/dbadmin/temp_dir \ --backup-image=incremental_image1.bi backup-to-image
В следующем примере выполняется инкрементное резервное копирование, подобное показанному выше, но оптимистичное.
mysqlbackup --defaults-file=/home/dbadmin/my.cnf \ --incremental=optimistic --incremental-base=history:last_backup \ --backup-dir=/home/dbadmin/temp_dir \ --backup-image=incremental_image1.bi backup-to-image
Дополнительно:
Используйте следующую команду, чтобы создать возрастающую директивную
резервную копию с использованием
--incremental-base=dir:
,
резервная копия сохраняется в местоположении, определенном
directory_path
--incremental-backup-dir
:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --incremental \ --incremental-base=dir:/incr-backup/wednesday \ --incremental-backup-dir=/incr-backup/thursday backup
Можно также использовать опцию
--start-lsn
,
чтобы определить, где инкрементное резервное копирование должно начаться.
Необходимо сделать запись LSN предыдущей резервной копии, о которой сообщает
mysqlbackup в конце резервной копии:
mysqlbackup: Was able to parse the log up to lsn 2654255716
Число также зарегистрировано в файле
meta/backup_variables.txt
каталога, указанного
--backup-dir
во время изготовления резервной копии. Подставляйте это число
mysqlbackup через опцию
--start-lsn
. Инкрементное резервное копирование тогда включает
все изменения, которые были после
указанного LSN.
Чтобы создать образ инкрементного резервного копирования с
--start-lsn
, используйте следующую команду, определяя через
--backup-dir
резервный каталог, который, в этом случае, является каталогом для хранения
метаданных для резервной копии и некоторых временных файлов:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --incremental \ --start-lsn=2654255716 --with-timestamp --backup-dir=/incr-tmp \ --backup-image=/incr-backup/incremental_image.bi \ backup-to-image
В следующем примере
--backup-image
не предоставляет полный путь к файлу образа,
который будет создан, образ инкрементного резервного копирования создается
под каталогом, определенным
--backup-dir
:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --incremental \ --start-lsn=2654255716 --with-timestamp \ --backup-dir=/incr-images \ --backup-image=incremental_image1.bi backup-to-image
На регулярной основе, определенной по дате или объему деятельности базы данных, делайте больше возрастающего или дифференциального резервного копирования.
Произвольно, периодически начинайте цикл снова, делая полную несжатую или сжатую резервную копию. Как правило, этот этап происходит, когда можно заархивировать и убрать самые старые данные резервного копирования.
О том как восстановить вашу базу данных, используя возрастающие резервные копии, посмотрите раздел 5.1.3.
Чтобы сэкономить дисковое пространство, можно сжать резервные файлы данных
InnoDB при помощи опции
--compress
. Сжатие позволяет вам держать больше данных резервного
копирования или сэкономить время передачи, посылая данные резервного
копирования на другой сервер. Кроме того, сжатие часто приводит к более
быстрым резервным копиям из-за уменьшенного IO.
Резервное сжатие работает только для таблиц InnoDB. После того, как файлы
табличного пространства InnoDB сжаты во время резервной копии, они получают
расширение .ibz
. Чтобы избежать тратить впустую циклы CPU, не
экономя дополнительное дисковое пространство, --compress
не пытается сжать таблицы, которые были уже сжаты на сервере (см.
Creating Compressed Tables),
тем не менее, такие файлы табличного пространства также сохранены с
расширением .ibz
в резервной копии.
Когда есть неиспользуемое место в файле табличного пространства InnoDB, весь файл копируется во время несжатой резервной копии. Выполните сжатую резервную копию, чтобы избежать издержек хранения для неиспользуемого места.
Файлы журнала реле и двоичного журнала сжаты и сохранены с расширением
.bz
, будучи включенными в
сжатую резервную копию.
Вы не можете использовать опцию
--compress
для возрастающих резервных копий, созданных
только с журналом отката (то есть с опцией
--incremental-with-redo-log-only
).
Можно также выбрать алгоритм сжатия, чтобы использовать опцию
--compress-method
, а используя ZLIB или алгоритм сжатия
LZMA, уровень сжатия опцией
--compress-level
. См.
раздел 20.6.
Это типовая команда для того, чтобы сделать сжатое однофайловое резервное копирование:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --compress \ --backup-image=backup.img backup-to-image
Дополнительно: Это типовая команда для того, чтобы сделать сжатую директивную резервную копию:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --compress-method=zlib \ --compress-level=5 backup
Это типовая команда для того, чтобы сделать сжатую и подготовленную директивную резервную копию:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --compress-method=zlib \ --compress-level=5 backup-and-apply-log
См. ограничение, которое относится к сжатым резервным копиям в приложении B.
По умолчанию все файлы в каталоге данных включены в резервную копию, чтобы резервная копия включала данные из всех механизмов хранения 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, используя
transportable
tablespaces (TTS). Это использует опции
--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
Взятие резервной копии всех таблиц кроме таблиц из баз данных 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 (специальные символы, например, пробелы или тире поддерживаются частичными резервными опциями):
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
.
Эта операция требует таблиц, не учитываемых для сохранения в отдельных
файлах
. Чтобы поместить таблица InnoDB вне системного табличного
пространства, создайте его в то время, как опция
table_name
.ibdinnodb_file_per_table
включена.
Каждый файл .ibd
хранит
данные и индексы только одной таблицы.
Таблицы InnoDB, составленные с выключенной опцией
innodb_file_per_table
, сохранены как обычно в
системном табличном
пространстве InnoDB и не могут быть исключены из резервной копии.
Для каждой таблицы с файлом данных последовательность формы
db_name.table_name
сравнена с регулярным выражением,
определенным опцией
--include
. Если регулярное выражение соответствует полной
последовательности db_name.table_name
, таблица включен в
резервную копию. Используемый синтаксис регулярного выражения является
расширенной формой, определенной в стандарте
POSIX 1003.2.
На Unix-системах укажите регулярное выражение соответственно, чтобы
предотвратить интерпретацию метазнаков оболочкой.
Эта опция была реализована с библиотекой регулярных выражений RE2.
Резервный каталог содержит файл журнала резервного копирования и копии файлов данных InnoDB.
ВАЖНО: Поскольку системное табличное пространство InnoDB содержит метаданные о таблицах InnoDB от всех баз данных, восстанавливая частичную резервную копию на сервере, который включает другие базы данных, можно заставить систему потерять след тех таблиц InnoDB в других базах данных. Всегда восстанавливайте частичные резервные копии на новом экземпляре сервера MySQL без любых других таблиц InnoDB, которые вы хотите сохранить.
Пример 4.22. Создание несжатой частичной резервной копии таблиц InnoDB
В этом примере мы формировали MySQL так, чтобы у некоторых таблиц InnoDB
были свои собственные табличные пространства. Мы делаем частичную резервную
копию включая только те таблицы InnoDB в базе данных test
,
имя которых начинается с ib
. Содержание каталога базы данных для
базы данных test
показано ниже. Из этих 10 таблиц шесть
(alex1
, alex2
,
alex3
, blobt3
,
ibstest0
, ibstest09
)
сохранены в отдельных файлах данных (файлы .ibd
).
$ ls /sqldata/mts/test
alex2.ibdibstest0.ibd alex1.ibdblobt3.ibdalex3.ibdibtest09.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
содержит только резервные копии таблиц
ibstest0
и ibtest09
, потому что другие таблицы
InnoDB не соответствуют образцу ^test\.ib.*
.
Пример 4.23. Создание сжатой частичной резервной копии
Мы формировали MySQL так, чтобы у каждой таблицы InnoDB было свое
собственное табличное пространство. Мы делаем частичную резервную копию
включая только те таблицы InnoDB, имя которых начинается с alex
или blob
. Содержание каталога для базы данных
test
показано ниже.
$ ls /sqldata/mts/test
alex2.ibdibstest0.ibdalex1.ibdblobt3.ibdalex3.ibdibtest09.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
Оптимистическая резервная копия это особенность улучшения работы для поддержки и восстановления огромных баз данных, в которых только небольшое количество таблиц часто изменяются.
Во время горячего резервного копирования огромной базы данных
огромные файлы журнала отката могли быть произведены на сервере, когда
резервная копия происходит. Поскольку файлы журнала отката растут
быстрее, чем они могут быть обработаны
mysqlbackup, операция резервного копирования
может на самом деле потерпеть неудачу, когда
mysqlbackup не может догнать циклы журнала
отката, и LSN переписаны сервером, прежде чем они будут прочитаны
mysqlbackup. Кроме того, шаг
apply-log
для
подготовки резервной копии для
восстановления может занять очень долгое время, так как
mysqlbackup имеет огромные файлы
ibbackup_logfile
(созданные из больших файлов
журнала отката) для резервной копии. Проблемы усилены, когда ресурсы I/O,
доступные для чтения и написания журналов отката, недостаточны во время
процессов резервирования и восстановления.
Оптимистическая резервная копия уменьшает проблемы, деля процесс резервного копирования на две внутренних фазы, которые очевидны для пользователей:
Оптимистическая фаза: В этой первой фазе таблицы, которые
вряд ли будут изменены во время процесса резервного копирования (называемые
далее бездействующими таблицами), определенные
пользователем с опцией
optimistic-time
или исключением с опцией
optimistic-busy-tables
), резервируются без блокировок.
И потому что те таблицы, как ожидают, не будут изменены, прежде чем резервная
копия будет закончена, журналы отката, отмены и системные табличные
пространства не резервируются mysqlbackup в
этой фазе вообще.
Нормальная фаза: В этой второй фазе таблицы, которые не поддерживаются в первой фазе (называемые занятыми таблицыми), поддерживаются способом, подобным тому, как они обрабатываются в обычной резервной копии: файлы InnoDB копируются сначала, затем другие соответствующие файлы копируются или обрабатываются с различными блокировками, применяемыми к базе данных в разное время. Журналы отката, отмены и системное табличное пространство также поддерживается в этой фазе.
Оптимистическая резервная копия происходит каждый раз, когда используется
опция
optimistic-time
или
optimistic-busy-tables
. Как использовать варианты см. подробные
описания для них в
разделе 20.10. Если как ожидалось список бездействующих таблиц,
определенных оптимистическими опциями, не изменится во время резервной копии
(или даже если это изменится незначительно),
большинство пользователей найдет, что полное время резервного копирования
уменьшается значительно по сравнению с обычной резервной копией,
поскольку размер данных о журнале отката, которые будут поддержаны, будет
намного меньшим. Кроме того, восстановления время
для резервной копии, будет также уменьшено, так как операция
apply-log
будет намного быстрее из-за меньшего журнала отката.
Однако, если оказывается, что список бездействующих таблиц изменен
значительно во время процесса резервного копирования,
выгоды выполнения оптимистического метода станут ограниченными и в худшем
случае оптимистическая резервная копия могла бы на самом деле занять больше
времени, а для однофайлового резервного копирования, размер резервной копии
будет больше, соответствуя обычной резервной копии. Поэтому пользователи
должны быть осторожными в идентификации, какие таблицы
бездействующие, а какие
заняты, пытаясь выполнить
оптимистическую резервную копию.
Оптимистическая резервная копия не может быть выполнена для инкрементного резервного копирования или резервной копии, используя transportable tablespaces (TTS).
Не выполняйте операцию DDL на сервере параллельно с оптимистической резервной копией или резервная копия потерпит неудачу.
Следующие примеры иллюстрируют, как сделать оптимистическую резервную копию.
Пример 4.24. Оптимистическая резервная копия, используя опцию
optimistic-time=
.YYMMDDHHMMSS
В этом примере таблицы, которые были изменены с полудня 16 мая 2011, рассматривают как занятые таблицы и поддерживают в нормальной фазе оптимистической резервной копии, все другие таблицы поддерживаются в оптимистической фазе:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf \ --optimistic-time=110516120000 \ --backup-image=<image-name>
\ --backup-dir=<temp-dir>
\ backup-to-image
Пример 4.25. Оптимистическая резервная
копии, используя опцию optimistic-time=now
В этом примере все таблицы рассматривают как бездействующие таблицы и поддерживают в оптимистической фазе оптимистической резервной копии:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --optimistic-time=now \ --backup-image=<image-name>
\ --backup-dir=<temp-dir>
\ backup-to-image
Пример 4.26. Оптимистическая резервная
копии, используя опцию optimistic-busy-tables
В этом примере таблицы в mydatabase
с
префиксом имени mytables-
рассматриваются как занятые таблицы и поддерживаются в нормальной фазе
оптимистической резервной копии, все другие таблицы
поддерживаются в оптимистической фазе:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf \ --optimistic-busy-tables="^mydatabase\.mytables-.*" \ --backup-image=<image-name>
\ --backup-dir=<temp-dir>
backup
Когда вы используете обе опции optimistic-time
и
optimistic-busy-tables
и они вступают в конфликт при
определении, какие таблицы должны быть занятыми,
optimistic-busy-tables
имеет приоритет перед
optimistic-time
, например:
Пример 4.27. Оптимистические и частичные резервные копии, используя
опции optimistic-busy-tables
и
optimistic-time
совместно
В этом примере таблицы в mydatabase
с префиксом
mytables-
рассматриваются как занятые таблицы и
поддерживаются в нормальной фазе, даже если они не были изменены с 16 мая
2010, времени, определенного optimistic-time
:
mysqlbackup --defaults-file=/home/dbadmin/my.cnf \ --optimistic-busy-tables="^mydatabase\.mytables-.*" \ --optimistic-time=100516--backup-image=<image-name>
\ --backup-dir=<temp-dir>
backup
Используя совместно оптимистическое резервное копирование и оптимистическое инкрементное резервное копирование в вашем расписании резервного копирования, можно ускорить резервные копии для огромных баз данных, особенно когда только относительно небольшое количество таблиц было изменено с определенного времени и не много таблиц изменяется на частой основе. Ниже дана типовая последовательность команд, иллюстрирующих еженедельное расписание резервного копирования, которое использует эти две особенности, это также включает шаги для восстановления данных к определенному дню.
# A full optimistic backup performed on 2017/02/04, Sat, at 1130 PM. # The --optimistic-time option is used to specify an optimistic time of 2016/08/16, 0800 PMmysqlbackup --defaults-file=/home/admin/my.cnf --optimistic-time=160816200000 \ --backup-dir=/home/admin/temp_dir \ --backup-image=/home/admin/backups/mydb_full_201702042330.bi \ --with-timestamp backup-to-image
# A sequence of optimistic incremental backups are then performed on each the following six days at 1130 PM # On Sunday, 2017/02/05mysqlbackup --defaults-file=/home/admin/my.cnf \ --incremental=optimistic --incremental-base=history:last_backup \ --backup-dir=/home/admin/temp_dir \ --backup-image=/home/admin/backups/mydb_incremental__201702052330.bi \ --with-timestamp backup-to-image
# On Monday, 2017/02/06mysqlbackup --defaults-file=/home/admin/my.cnf \ --incremental=optimistic --incremental-base=history:last_backup \ --backup-dir=/home/admin/temp_dir \ --backup-image=/home/admin/backups/mydb_incremental__201702062330.bi \ --with-timestamp backup-to-image
# On Tuesday, 2017/02/07mysqlbackup --defaults-file=/home/admin/my.cnf \ --incremental=optimistic --incremental-base=history:last_backup \ --backup-dir=/home/admin/temp_dir \ --backup-image=/home/admin/backups/mydb_incremental__201702072330.bi \ --with-timestamp backup-to-image
# On Wednesday, 2017/02/08mysqlbackup --defaults-file=/home/admin/my.cnf \ --incremental=optimistic --incremental-base=history:last_backup \ --backup-dir=/home/admin/temp_dir \ --backup-image=/home/admin/backups/mydb_incremental__201702082330.bi \ --with-timestamp backup-to-image
# On Thursday, 2017/02/09mysqlbackup --defaults-file=/home/admin/my.cnf \ --incremental=optimistic --incremental-base=history:last_backup \ --backup-dir=/home/admin/temp_dir \ --backup-image=/home/admin/backups/mydb_incremental__201702092330.bi \ --with-timestamp backup-to-image
# On Friday, 2017/02/10mysqlbackup --defaults-file=/home/admin/my.cnf \ --incremental=optimistic --incremental-base=history:last_backup \ --backup-dir=/home/admin/temp_dir \ --backup-image=/home/admin/backups/mydb_incremental__201702102330.bi \ --with-timestamp backup-to-image
# Another full optimistic backup is performed on Saturday, 2017/02/11mysqlbackup --defaults-file=/home/dbadmin/my.cnf \ --optimistic-time=110516200000 --backup-dir=/home/admin/temp_dir \ --backup-image=/home/admin/backups/mydb_full_201702112330.bi \ --with-timestamp backup-to-image
# Restore the database to its state at Tuesday, 2017/02/07, at 11:30 PM # First, restore the full optimistic backup taken on the Saturday before, which was 2017/02/04:mysqlbackup --defaults-file=/etc/my.cnf \ --backup-image=/home/admin/backups/mydb_full_201702042330.bi \ --backup-dir=/home/admin/temp_dir --datadir=/var/lib/mysql \ --with-timestamp copy-back-and-apply-log
# Next, restore the optimistic incremental taken on the Sunday, Monday, and Tuesday that follow:mysqlbackup --defaults-file=/etc/my.cnf \ --backup-image=/home/admin/backups/mydb_incremental__201702052330.bi \ --backup-dir=/home/admin/temp_dir --datadir=/var/lib/mysql \ --incremental --with-timestamp copy-back-and-apply-log
mysqlbackup --defaults-file=/etc/my.cnf \ --backup-image=/home/admin/backups/mydb_incremental__201702062330.bi \ --backup-dir=/home/admin/temp_dir --datadir=/var/lib/mysql \ --incremental --with-timestamp copy-back-and-apply-log
mysqlbackup --defaults-file=/etc/my.cnf \ --backup-image=/home/admin/backups/mydb_incremental__201702072330.bi \ --backup-dir=/home/admin/temp_dir --datadir=/var/lib/mysql \ --incremental --with-timestamp copy-back-and-apply-log
Опция
--exec-when-locked
позволяет вам определить команду (вместе с
желаемыми аргументами команды), чтобы работать около конца резервной копии в
то время, как не-InnoDB таблицы базы данных все еще заблокированы.
Эта команда может скопировать или создать дополнительные файлы в резервном
каталоге. Например, можно использовать этот выбор, чтобы зарезервировать
таблицы MEMORY
командой mysqldump,
храня вывод в резервном каталоге. Чтобы задержать любое переназначение или
подстановку переменных до окончания выполнения команды, приложите значение
опции в одинарных кавычках.
Поддержание графика регулярного резервного копирования является важной мерой для предотвращения потери данных. Эта секция обсуждает некоторые простые средства для подготовки графика для MySQL Enterprise Backup.
Linux и Unix-платформы: можно настроить работу cron на системе для запланированного резервного копирования. Есть два типа задач cron. Чтобы настроить пользовательскую работу cron, которая принадлежит и управляется конкретным пользователем, делают следующее:
Войдите в систему как пользователь, который управляет MySQL Enterprise Backup и используйте следующую команду, чтобы вызвать редактор для создания (или изменения) crontab:
shell> crontab -e
В редакторе добавьте запись, подобную этой, к crontab, затем сохраните свои изменения (удостоверьтесь, что содержание обеих строк ниже появляется в одной строке в crontab):
@daily /path-to-mysqlbackup
/mysqlbackup -uroot --backup-dir=/path-to-backup-folder
/cronbackups --with-timestamp --backup-image=my.mib backup-to-image&>/dev/null
Эта запись crontab вызывает mysqlbackup,
чтобы создать резервную копию в каталоге
cronbackups
ежедневно в 00:00:00
.
Выводы из stderr
и stdout
перенаправляются в
/dev/null/, таким образом, они не вызовут другие действия со стороны сервера
Cron (например, уведомления по электронной почте пользователю).
Чтобы настроить системную работу cron, которая принадлежит и управляется
root
, создайте файл в каталоге
/etc/cron.d
и поместите него подобную запись
crontab, как показанная выше, добавляя пользователя
(root
в следующем примере) перед командой
mysqlbackup:
@daily root /path-to-mysqlbackup
/mysqlbackup -uroot --backup-=/path-to-backup-folder
/cronbackups \ --with-timestamp --backup-image=my.mib backup-to-image&>/dev/null
Проверьте документацию своей платформы для получения дальнейшей информации относительно различных способов настроить задачи cron для различных типов графиков.
Windows: используйте Task Scheduler. Проверьте документацию на свою платформу Windows для инструкций.
Когда системные администраторы пытаются настроить MySQL и MySQL Enterprise Backup в окружающей среде, которая использует распределенную файловую систему (DFS) или storage access network (SAN), сервер MySQL, каталог данных сервера, MySQL Enterprise Backup и резервный каталог могут существовать на различных физических серверах. Когда это происходит, на операции mysqlbackup можно было бы повлиять. Операция, которая, скорее всего, испытает негативное влияние, является горячим резервным копированием, успех которого зависит от:
Каждая страница файла данных последовательно копируется, то есть, все байты на странице соответствуют тому же самому LSN.
Никакая скопированная страница не более старая, чем время, которое отмечает начало временной продолжительности, которую резервная копия использует.
Журнал отката последовательно копируется, означая, что непрерывный сегмент журнала отката копируется, а именно все изменения с начала временного периода, которого резервная копия должна касаться, до конца операции резервного копирования. Каждый блок скопированного журнала отката должен быть последовательным.
Условие 1 легко достижимо с большей частью DFS или SAN. Условие 2 может остаться невыполненным, даже когда условие 1 было удовлетворено: например, mysqlbackup мог скопировать все страницы табличного пространства правильно за исключением одной страницы, для которой mysqlbackup включал старую версию в копию. Если LSN той старой версии страницы будет меньшим, чем LSN, увиденный в первый раз mysqlbackup в начале процесса резервного копирования, получающаяся резервная копия будет дефектной. Этот пример показывает, что mysqlbackup может быть проблемой при выполнении горячего резервного копирования, если это видит записи файловой системы, выполняемые в правильном порядке, то есть, порядке, в котором сервер выполнил их.
Относительно условия 3, в отличие от страниц файла данных, блоки журнала отката написаны последовательно, что означает, что условие 3 легче выполнить, чем условия 1 и 2, особенно используя функцию архивации журнала отката, доступную в MySQL Server 8.0.17. Однако, если mysqlbackup достигает самого высокого LSN на скопированных страницах файла данных прежде, чем столкнуться с концом журнала отката, резервная копия терпит неудачу. Неудача происходит также, если mysqlbackup читает испорченный блок журнала когда-либо во время копирования журнала отката. Обе этих неудачи могут произойти, если mysqlbackup не видит ту же самую историю состояний файловой системы, как сервер MySQL.
Поэтому, чтобы использовать mysqlbackup с DFS или SAN, важно удостовериться, что mysqlbackup видит все записи файловой системы в том же самом порядке, как сервер MySQL их делает. Условие, скорее всего, будет удовлетворено, когда mysqlbackup и сервер MySQL будут работать на том же самом сервере, но это условие вряд ли будет всегда выполняться, когда это не так.