Spec-Zone .ru
спецификации, руководства, описания, API

17.6.9. MySQL Cluster Replication MySQL Cluster Backups With

17.6.9.1. MySQL Cluster Replication: Автоматизация Синхронизации ReplicationSlave к Основному Двоичному Журналу
17.6.9.2. Восстановление момента времени Используя MySQL Cluster Replication

Этот раздел обсуждает резервные копии создания и восстановление от них использующий репликацию MySQL Cluster. Мы предполагаем, что сервера репликации были уже сконфигурированы как крытый ранее (см. Раздел 17.6.5, "Подготовка MySQL Cluster for Replication", и разделов сразу после). Это сделанное, процедура для того, чтобы сделать резервное копирование и затем восстановить от этого следующие:

  1. Есть два различных метода, которыми может быть запущено резервное копирование.

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

      ndb-connectstring=management_host[:port]
      Отметить

      Номер порта должен быть определен, только если порт значения по умолчанию (1186) не используется. См. Раздел 17.2.4, "Начальная Конфигурация MySQL Cluster", для получения дополнительной информации о портах и выделении порта в MySQL Cluster.

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

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

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

      В нашем сценарии как обрисовано в общих чертах ранее (см. Раздел 17.6.5, "Подготовка MySQL Cluster for Replication"), это было бы выполнено следующим образом:

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

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

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

    Важный

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

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

    mysqlS> RESET SLAVE;

    Важно удостовериться что ведомое устройство apply_status таблица не содержит записей до выполнения процесса восстановления. Можно выполнить это, выполняя этот SQL-оператор на ведомом устройстве:

    mysqlS> DELETE FROM mysql.ndb_apply_status;
  5. Можно теперь запустить процесс восстановления кластера на ведомом устройстве репликации использование ndb_restore команды для каждого файла резервной копии поочередно. Для первого из них необходимо включать -m опция, чтобы восстановить метаданные кластера:

    shellS> ndb_restore -c slave_host:port -n node-id
                        \        -b backup-id -m -r dir

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

    Для того, чтобы восстановить от основного кластера с четырьмя узлами данных (как показано в числе в Разделе 17.6, "MySQL Cluster Replication"), где файлы резервных копий были скопированы в каталог /var/BACKUPS/BACKUP-1, надлежащая последовательность команд, которые будут выполнены на ведомом устройстве, могла бы быть похожей на это:

    shellS> ndb_restore -c rep-slave:1186 -n 2 -b 1 -m
                        \        -r ./var/BACKUPS/BACKUP-1shellS> ndb_restore -c
                        rep-slave:1186 -n 3 -b 1 \        -r
                        ./var/BACKUPS/BACKUP-1shellS> ndb_restore -c rep-slave:1186 -n 4 -b 1 \        -r ./var/BACKUPS/BACKUP-1shellS> ndb_restore -c
                        rep-slave:1186 -n 5 -b 1 -e \        -r
                        ./var/BACKUPS/BACKUP-1
    Важный

    -e (или --restore_epoch) опция в заключительном вызове ndb_restore в этом примере требуется, чтобы эпоха была записана ведомому устройству mysql.ndb_apply_status. Без этой информации ведомое устройство не будет в состоянии синхронизироваться должным образом с ведущим устройством. (См. Раздел 17.4.18, "ndb_restore — Восстановление MySQL Cluster Backup".)

  6. Теперь Вы должны получить новую эпоху из ndb_apply_status таблица на ведомом устройстве (как обсуждено в Разделе 17.6.8, "Реализовывая Failover с MySQL Cluster Replication"):

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

    mysqlM> SELECT     ->     @file:=SUBSTRING_INDEX(File,
                        '/', -1),     ->     @pos:=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 клиенте ведомого устройства:

    mysqlS> CHANGE MASTER TO     ->     MASTER_LOG_FILE='@file',     ->     MASTER_LOG_POS=@pos;
  9. Теперь, когда ведомое устройство "знает" от какой точка в который binlog файл, чтобы начать читать данные от ведущего устройства, можно заставить ведомое устройство начинать тиражироваться с этим стандартным оператором MySQL:

    mysqlS> START SLAVE;

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

Для дополнительной информации о выполнении резервных копий Кластера и восстановлении Кластера от резервных копий, см. Раздел 17.5.3, "Онлайновое Резервное копирование MySQL Cluster".