Spec-Zone.ru › MySQL 5.7

21.7.9 Резервное копирование кластера NDB с репликацией NDB Cluster

  • 21.7.9.1 Репликация NDB Cluster: Автоматизация синхронизации реплики с исходным двоичным журналом
  • 21.7.9.2 Восстановление по состоянию на определенный момент времени с использованием репликации NDB Cluster

В этом разделе рассматривается создание резервных копий и восстановление из них с использованием репликации NDB Cluster. Предполагается, что серверы репликации уже настроены в соответствии с предыдущими описаниями (см. Раздел 21.7.5, «Подготовка NDB Cluster для репликации» и последующие разделы). После этого процедура создания резервной копии и восстановления из неё выглядит следующим образом:

  1. Существует два различных метода запуска резервного копирования.

    • Метод A. Этот метод требует, чтобы процесс резервного копирования кластера был предварительно включён на исходном сервере до запуска процесса репликации. Это можно сделать, включив следующую строку в раздел [mysql_cluster] в файле my.cnf file, где management_host — IP-адрес или имя хоста сервера управления NDB исходного кластера, а port — номер порта сервера управления:

      ndb-connectstring=management_host[:port]
      
      Примечание

      Номер порта необходимо указывать только в том случае, если используется не стандартный порт (1186). См. Раздел 21.3.3, «Начальная настройка NDB Cluster» для получения дополнительной информации о портах и распределении портов в NDB Cluster.

      В этом случае резервное копирование можно запустить, выполнив эту команду на источнике репликации:

      shellS> ndb_mgm -e "START BACKUP"
      
    • Метод B. Если в файле my.cnf не указано, где найти хост управления, можно запустить процесс резервного копирования, передав эту информацию клиенту управления NDB в качестве части команды START BACKUP. Это можно сделать, как показано ниже, где management_host и port — имя хоста и номер порта сервера управления:

      shellS> ndb_mgm management_host:port -e "START BACKUP"
      

      В нашем сценарии, как указано ранее (см. Раздел 21.7.5, «Подготовка NDB Cluster для репликации»), это будет выполнено следующим образом:

      shellS> ndb_mgm rep-source:1186 -e "START BACKUP"
      
  2. Скопируйте файлы резервной копии кластера на реплику, которая запускается. Каждый компьютер, на котором запущен процесс ndbd для исходного кластера, имеет файлы резервной копии кластера, и все эти файлы должны быть скопированы на реплику, чтобы обеспечить успешное восстановление. Файлы резервной копии можно скопировать в любой каталог на компьютере, где находится хост управления реплики, при условии, что у бинарных файлов MySQL и NDB есть права чтения в этом каталоге. В этом случае мы предполагаем, что эти файлы были скопированы в каталог /var/BACKUPS/BACKUP-1.

    Хотя не обязательно, чтобы реплицируемый кластер имел такое же количество процессов ndbd (узлов данных), как источник, настоятельно рекомендуется, чтобы их количество было одинаковым. Необходимо, чтобы реплика запускалась с опцией --skip-slave-start, чтобы предотвратить преждевременный запуск процесса репликации.

  3. Создайте на реплике кластера любые базы данных, которые присутствуют в исходном кластере и должны быть реплицированы.

    Важно

    Обязательно выполните операцию CREATE DATABASE (или CREATE SCHEMA) для каждой реплицируемой базы данных на каждом узле SQL в реплицируемом кластере.

  4. Сбросьте реплицируемый кластер, используя эту команду в клиенте mysql:

    mysqlR> RESET SLAVE;
    
  5. Теперь можно начать процесс восстановления кластера на реплике, используя команду ndb_restore для каждого файла резервной копии по очереди. Для первого из них необходимо использовать опцию -m для восстановления метаданных кластера, как показано здесь:

    shellR> ndb_restore -c replica_host:port -n node-id \
            -b backup-id -m -r dir
    

    dir — путь к каталогу, в котором файлы резервной копии были помещены на реплику. Для команд ndb_restore , соответствующих остальным файлам резервной копии, опцию -m не нужно использовать.

    Для восстановления из исходного кластера с четырьмя узлами данных (как показано на рисунке в Разделе 21.7, «Репликация NDB Cluster»), где файлы резервной копии были скопированы в каталог /var/BACKUPS/BACKUP-1, последовательность команд для выполнения на реплике может выглядеть следующим образом:

    shellR> ndb_restore -c replica-host:1186 -n 2 -b 1 -m \
            -r ./var/BACKUPS/BACKUP-1
    shellR> ndb_restore -c replica-host:1186 -n 3 -b 1 \
            -r ./var/BACKUPS/BACKUP-1
    shellR> ndb_restore -c replica-host:1186 -n 4 -b 1 \
            -r ./var/BACKUPS/BACKUP-1
    shellR> 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».)

  6. Теперь необходимо получить последнюю эпоху из таблицы ndb_apply_status на реплике (как обсуждалось в Разделе 21.7.8, «Реализация резервного копирования с репликацией NDB Cluster»):

    mysqlR> SELECT @latest:=MAX(epoch)
            FROM mysql.ndb_apply_status;
    
  7. Используя @latest как значение эпохи, полученное на предыдущем шаге, можно получить правильную начальную позицию @pos в правильном двоичном журнале @file из таблицы mysql.ndb_binlog_index на источнике. Приведенный запрос получает эти значения из столбцов next_position и next_file из последней применённой эпохи перед логической позицией восстановления:

    mysqlS> 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. В этом случае нужно определить, какой это файл, и вручную или с помощью скрипта предоставить его имя на следующем шаге.

  8. Используя значения, полученные на предыдущем шаге, можно теперь выполнить соответствующую команду CHANGE MASTER TO в клиенте mysql реплики:

    mysqlR> CHANGE MASTER TO
         ->     MASTER_LOG_FILE='@file',
         ->     MASTER_LOG_POS=@pos;
    
  9. Теперь, когда реплика знает, с какой точки в каком двоичном журнале начать чтение данных с источника, можно запустить репликацию этой командой:

    mysqlR> START SLAVE;
    

Для выполнения резервного копирования и восстановления по второму каналу репликации необходимо только повторить эти шаги, заменив имена хостов и идентификаторы вторичного источника и реплики соответствующими значениями для первичного источника и серверов реплики и выполнив предшествующие команды на них.

Дополнительную информацию о создании резервных копий кластера и восстановлении кластера из резервных копий см. в Разделе 21.6.8, «Онлайн резервное копирование NDB Cluster».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/mysql-cluster-replication-backups.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API