25.7.9 Резервное копирование кластера NDB с репликацией NDB Cluster
В данном разделе рассматривается создание резервных копий и восстановление из них с использованием репликации NDB Cluster. Предполагается, что сервера репликации уже настроены, как описано ранее (см. раздел 25.7.5 «Подготовка кластера NDB к репликации» и следующие за ним разделы). После этого процедура создания резервной копии и восстановления из неё выглядит следующим образом:
-
Существует два разных метода запуска резервного копирования.
-
Метод A. Этот метод требует, чтобы процесс резервного копирования кластера был предварительно включён на исходном сервере до начала процесса репликации. Это можно сделать, включив следующую строку в раздел
[mysql_cluster]файлаmy.cnf file, гдеmanagement_host— IP-адрес или имя хоста сервера управленияNDBисходного кластера, аport— номер порта сервера управления:ndb-connectstring=
management_host[:port]ПримечаниеНомер порта необходимо указать только в том случае, если используется не стандартный порт (1186). Подробности о портах и их назначении в NDB Cluster см. в разделе 25.3.3 «Начальная настройка NDB Cluster».
В этом случае резервное копирование можно начать, выполнив эту команду на исходном сервере репликации:
shell
S>ndb_mgm -e "START BACKUP" -
Метод B. Если файл
my.cnfне указывает, где найти хост сервера управления, вы можете запустить процесс резервного копирования, передав эту информацию клиенту управленияNDBкак часть командыSTART BACKUP. Это можно сделать следующим образом, гдеmanagement_hostиport— имя хоста и номер порта сервера управления:shell
S>ndb_mgmmanagement_host:port-e "START BACKUP"В нашем сценарии, как описано ранее (см. раздел 25.7.5 «Подготовка кластера NDB к репликации»), это будет выполняться следующим образом:
shell
S>ndb_mgm rep-source:1186 -e "START BACKUP"
-
-
Скопируйте файлы резервной копии кластера на реплику, которая запускается. Каждый системный процесс ndbd исходного кластера имеет файлы резервной копии кластера, и все эти файлы должны быть скопированы на реплику для обеспечения успешного восстановления. Файлы резервной копии можно скопировать в любую директорию на компьютере, где находится хост управления реплики, при условии, что у MySQL и NDB бинарников есть права чтения в этой директории. В этом случае предполагается, что эти файлы были скопированы в директорию
/var/BACKUPS/BACKUP-1.Хотя не обязательно, чтобы у реплицируемого кластера было такое же количество узлов данных, как у исходного, настоятельно рекомендуется, чтобы их количество было одинаковым. Необходимо, чтобы процесс репликации был остановлен при запуске сервера реплики. Это можно сделать, запустив реплику с параметром
--skip-replica-start. -
Создайте на реплике кластера все базы данных, которые присутствуют на исходном кластере и подлежат репликации.
ВажноЗапрос
CREATE DATABASE(илиCREATE SCHEMA) для каждой базы данных, подлежащей репликации, должен быть выполнен на каждом SQL-узле реплицируемого кластера. -
Сбросьте реплику кластера с помощью этой команды в клиенте mysql:
mysql
R>RESET REPLICA; -
Теперь вы можете начать процесс восстановления кластера на реплике, используя команду ndb_restore для каждого файла резервной копии по очереди. Для первого из них необходимо использовать параметр
-mдля восстановления метаданных кластера, как показано здесь:shell
R>ndb_restore -creplica_host:port-nnode-id\-bbackup-id-m -rdirdir— путь к директории, в которую файлы резервной копии были помещены на реплику. Для команд ndb_restore, соответствующих остальным файлам резервной копии, параметр-mне должен использоваться.Для восстановления из исходного кластера с четырьмя узлами данных (как показано на рисунке в разделе 25.7 «Репликация NDB Cluster»), где файлы резервной копии были скопированы в директорию
/var/BACKUPS/BACKUP-1, последовательность команд для выполнения на реплике может выглядеть так:shell
R>ndb_restore -c replica-host:1186 -n 2 -b 1 -m \-r ./var/BACKUPS/BACKUP-1shellR>ndb_restore -c replica-host:1186 -n 3 -b 1 \-r ./var/BACKUPS/BACKUP-1shellR>ndb_restore -c replica-host:1186 -n 4 -b 1 \-r ./var/BACKUPS/BACKUP-1shellR>ndb_restore -c replica-host:1186 -n 5 -b 1 -e \-r ./var/BACKUPS/BACKUP-1ВажноПараметр
-e(или--restore-epoch) в последнем вызове ndb_restore в этом примере необходим для того, чтобы эпоха была записана в таблицуmysql.ndb_apply_statusреплики. Без этой информации реплика не может должным образом синхронизироваться с исходным сервером. (См. раздел 25.5.23 «ndb_restore — Восстановление резервной копии NDB Cluster».) -
Теперь необходимо получить последнюю эпоху из таблицы
ndb_apply_statusна реплике (как обсуждалось в разделе 25.7.8 «Реализация переключения на резервную копию с репликацией NDB Cluster»):mysql
R>SELECT @latest:=MAX(epoch)FROM mysql.ndb_apply_status; -
Используя значение эпохи
@latest, полученное на предыдущем шаге, вы можете получить правильное начальное положение@posв правильном файле бинарного журнала@fileиз таблицыmysql.ndb_binlog_indexна источнике. Показанный здесь запрос получает эти значения из столбцовPositionиFileпоследней применённой эпохи перед логическим положением восстановления:mysql
S>SELECT->@file:=SUBSTRING_INDEX(File, '/', -1),->@pos:=Position->FROM mysql.ndb_binlog_index->WHERE epoch > @latest->ORDER BY epoch ASC LIMIT 1;В случае, если в настоящее время нет трафика репликации, аналогичную информацию можно получить, выполнив
SHOW BINARY LOG STATUSна источнике и используя значение, показанное в столбцеPositionвывода для файла, имя которого имеет суффикс с наибольшим значением для всех файлов, показанных в столбцеFile. В этом случае необходимо определить, какой это файл, и вручную или с помощью скрипта передать его имя на следующем шаге. -
Используя значения, полученные на предыдущем шаге, вы можете выполнить соответствующую команду в клиенте mysql реплики. Используйте следующую команду
CHANGE REPLICATION SOURCE TO:mysql
R>CHANGE REPLICATION SOURCE TO->SOURCE_LOG_FILE='@file',->SOURCE_LOG_POS=@pos; -
Теперь, когда реплика знает, с какой точки в каком файле бинарного журнала начать считывание данных с источника, вы можете запустить репликацию с этой командой:
mysql
R>START REPLICA;
Для выполнения резервного копирования и восстановления на втором канале репликации необходимо только повторить эти шаги, заменив имена хостов и идентификаторы вторичного источника и реплики на соответствующие имена хостов и идентификаторы первичного источника и серверов реплики, и выполнив предыдущие команды на них.
Дополнительную информацию о выполнении резервных копий кластера и восстановлении кластера из резервных копий см. в разделе 25.6.8 «Онлайн резервное копирование кластера NDB».
© 2025 Oracle
Licensed under the GPLv2 License.