Spec-Zone.ru › MySQL 9.2

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

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

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

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

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

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

      Номер порта необходимо указать только в том случае, если используется не стандартный порт (1186). Подробности о портах и их назначении в NDB Cluster см. в разделе 25.3.3 «Начальная настройка 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"
      

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

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

    Хотя не обязательно, чтобы у реплицируемого кластера было такое же количество узлов данных, как у исходного, настоятельно рекомендуется, чтобы их количество было одинаковым. Необходимо, чтобы процесс репликации был остановлен при запуске сервера реплики. Это можно сделать, запустив реплику с параметром --skip-replica-start.

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

    Важно

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

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

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

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

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

    Для восстановления из исходного кластера с четырьмя узлами данных (как показано на рисунке в разделе 25.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 реплики. Без этой информации реплика не может должным образом синхронизироваться с исходным сервером. (См. раздел 25.5.23 «ndb_restore — Восстановление резервной копии NDB Cluster».)

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

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

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

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

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

    mysqlR> START REPLICA;

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

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

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

Spec-Zone.ru

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