21.7.9 Резервное копирование кластера NDB с репликацией NDB Cluster
В этом разделе рассматривается создание резервных копий и восстановление из них с использованием репликации NDB Cluster. Предполагается, что серверы репликации уже настроены в соответствии с предыдущими описаниями (см. Раздел 21.7.5, «Подготовка NDB Cluster для репликации» и последующие разделы). После этого процедура создания резервной копии и восстановления из неё выглядит следующим образом:
-
Существует два различных метода запуска резервного копирования.
-
Метод A. Этот метод требует, чтобы процесс резервного копирования кластера был предварительно включён на исходном сервере до запуска процесса репликации. Это можно сделать, включив следующую строку в раздел
[mysql_cluster]в файлеmy.cnf file, гдеmanagement_host— IP-адрес или имя хоста сервера управленияNDBисходного кластера, аport— номер порта сервера управления:ndb-connectstring=
management_host[:port]ПримечаниеНомер порта необходимо указывать только в том случае, если используется не стандартный порт (1186). См. Раздел 21.3.3, «Начальная настройка NDB Cluster» для получения дополнительной информации о портах и распределении портов в 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"В нашем сценарии, как указано ранее (см. Раздел 21.7.5, «Подготовка NDB Cluster для репликации»), это будет выполнено следующим образом:
shell
S>ndb_mgm rep-source:1186 -e "START BACKUP"
-
-
Скопируйте файлы резервной копии кластера на реплику, которая запускается. Каждый компьютер, на котором запущен процесс ndbd для исходного кластера, имеет файлы резервной копии кластера, и все эти файлы должны быть скопированы на реплику, чтобы обеспечить успешное восстановление. Файлы резервной копии можно скопировать в любой каталог на компьютере, где находится хост управления реплики, при условии, что у бинарных файлов MySQL и NDB есть права чтения в этом каталоге. В этом случае мы предполагаем, что эти файлы были скопированы в каталог
/var/BACKUPS/BACKUP-1.Хотя не обязательно, чтобы реплицируемый кластер имел такое же количество процессов ndbd (узлов данных), как источник, настоятельно рекомендуется, чтобы их количество было одинаковым. Необходимо, чтобы реплика запускалась с опцией
--skip-slave-start, чтобы предотвратить преждевременный запуск процесса репликации. -
Создайте на реплике кластера любые базы данных, которые присутствуют в исходном кластере и должны быть реплицированы.
ВажноОбязательно выполните операцию
CREATE DATABASE(илиCREATE SCHEMA) для каждой реплицируемой базы данных на каждом узле SQL в реплицируемом кластере. -
Сбросьте реплицируемый кластер, используя эту команду в клиенте mysql:
mysql
R>RESET SLAVE; -
Теперь можно начать процесс восстановления кластера на реплике, используя команду ndb_restore для каждого файла резервной копии по очереди. Для первого из них необходимо использовать опцию
-mдля восстановления метаданных кластера, как показано здесь:shell
R>ndb_restore -creplica_host:port-nnode-id\-bbackup-id-m -rdirdir— путь к каталогу, в котором файлы резервной копии были помещены на реплику. Для команд ndb_restore , соответствующих остальным файлам резервной копии, опцию-mне нужно использовать.Для восстановления из исходного кластера с четырьмя узлами данных (как показано на рисунке в Разделе 21.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реплики. Без этой информации реплика не может правильно синхронизироваться с источником. (См. Раздел 21.5.24, «ndb_restore — Восстановление резервной копии NDB Cluster».) -
Теперь необходимо получить последнюю эпоху из таблицы
ndb_apply_statusна реплике (как обсуждалось в Разделе 21.7.8, «Реализация резервного копирования с репликацией NDB Cluster»):mysql
R>SELECT @latest:=MAX(epoch)FROM mysql.ndb_apply_status; -
Используя
@latestкак значение эпохи, полученное на предыдущем шаге, можно получить правильную начальную позицию@posв правильном двоичном журнале@fileиз таблицыmysql.ndb_binlog_indexна источнике. Приведенный запрос получает эти значения из столбцовnext_positionиnext_fileиз последней применённой эпохи перед логической позицией восстановления:mysql
S>SELECT->@file:=SUBSTRING_INDEX(next_file, '/', -1),->@pos:=next_position->FROM mysql.ndb_binlog_index->WHERE epoch > @latest->ORDER BY epoch ASC LIMIT 1;В случае, если в настоящее время нет трафика репликации, подобную информацию можно получить, выполнив
SHOW MASTER STATUSна источнике и используя значение, отображаемое в столбцеPositionвывода для файла, имя которого имеет суффикс с наибольшим значением для всех файлов, отображаемых в столбцеFile. В этом случае нужно определить, какой это файл, и вручную или с помощью скрипта предоставить его имя на следующем шаге. -
Используя значения, полученные на предыдущем шаге, можно теперь выполнить соответствующую команду
CHANGE MASTER TOв клиенте mysql реплики:mysql
R>CHANGE MASTER TO->MASTER_LOG_FILE='@file',->MASTER_LOG_POS=@pos; -
Теперь, когда реплика знает, с какой точки в каком двоичном журнале начать чтение данных с источника, можно запустить репликацию этой командой:
mysql
R>START SLAVE;
Для выполнения резервного копирования и восстановления по второму каналу репликации необходимо только повторить эти шаги, заменив имена хостов и идентификаторы вторичного источника и реплики соответствующими значениями для первичного источника и серверов реплики и выполнив предшествующие команды на них.
Дополнительную информацию о создании резервных копий кластера и восстановлении кластера из резервных копий см. в Разделе 21.6.8, «Онлайн резервное копирование NDB Cluster».
© 2025 Oracle
Licensed under the GPLv2 License.