21.5.24.2 Восстановление с другим числом узлов данных
Возможна реставрация из резервной копии NDB на кластер с другим числом узлов данных, чем у изначального кластера, с которого была сделана резервная копия. В следующих двух разделах обсуждаются случаи, когда целевой кластер имеет меньшее или большее число узлов данных, чем исходный кластер резервной копии.
21.5.24.2.1 Восстановление на меньшее число узлов, чем изначальное
Вы можете восстановить на кластер с меньшим числом узлов данных, чем изначальный, при условии, что большее число узлов является целым кратным меньшего числа. В следующем примере мы используем резервную копию, сделанную на кластере с четырьмя узлами данных, для кластера с двумя узлами данных.
-
Сервер управления исходным кластером находится на хосте
host10. Исходный кластер имеет четыре узла данных, с идентификаторами узлов и именами хостов, показанными в следующем фрагменте из файлаconfig.iniсервера управления:[ndbd]
NodeId=2HostName=host2 [ndbd] NodeId=4 HostName=host4 [ndbd] NodeId=6 HostName=host6 [ndbd] NodeId=8 HostName=host8Мы предполагаем, что каждый узел данных изначально был запущен с ndbmtd
--ndb-connectstring=host10или с эквивалентом. Выполните резервное копирование стандартным способом. См. Раздел 21.6.8.2, «Использование клиента управления кластером NDB для создания резервной копии» для получения информации об этом.
-
Файлы, созданные резервной копией на каждом узле данных, перечислены здесь, где
N— идентификатор узла, аB— идентификатор резервной копии.BACKUP-B-0.N.DataBACKUP-B.N.ctlBACKUP-B.N.log
Эти файлы находятся в
BackupDataDir/BACKUP/BACKUP-на каждом узле данных. Для остальной части этого примера мы предполагаем, что идентификатор резервной копии равен 1.BВсе эти файлы должны быть доступны для последующей копии на новые узлы данных (где к ним можно получить доступ на локальной файловой системе узла данных с помощью ndb_restore). Проще всего скопировать их все в одно место; мы предполагаем, что вы это сделали.
-
Сервер управления целевого кластера находится на хосте
host20, и у целевого кластера есть два узла данных, с идентификаторами узлов и именами хостов, показанными в файле управленияconfig.iniсервера наhost20:[ndbd] NodeId=3 hostname=host3 [ndbd] NodeId=5 hostname=host5
Каждый процесс узла данных на
host3иhost5должен быть запущен с ndbmtd-c host20--initialили эквивалентом, чтобы новый (целевой) кластер запускался с чистыми файловыми системами узлов данных. -
Скопируйте две разные наборы из двух файлов резервной копии на каждый из целевых узлов данных. В этом примере скопируйте файлы резервной копии с узлов 2 и 4 из исходного кластера на узел 3 в целевом кластере. Эти файлы перечислены здесь:
BACKUP-1-0.2.DataBACKUP-1.2.ctlBACKUP-1.2.logBACKUP-1-0.4.DataBACKUP-1.4.ctlBACKUP-1.4.log
Затем скопируйте файлы резервной копии с узлов 6 и 8 на узел 5; эти файлы показаны в следующем списке:
BACKUP-1-0.6.DataBACKUP-1.6.ctlBACKUP-1.6.logBACKUP-1-0.8.DataBACKUP-1.8.ctlBACKUP-1.8.log
Для остальной части этого примера мы предполагаем, что соответствующие файлы резервной копии были сохранены в каталоге
/BACKUP-1на каждом из узлов 3 и 5. -
На каждом из двух целевых узлов данных необходимо восстановить из обеих наборов резервных копий. Сначала восстановите резервные копии с узлов 2 и 4 на узел 3, вызвав ndb_restore на
host3, как показано здесь:$>
ndb_restore -c host20$>--nodeid=2--backupid=1--restore-data--backup-path=/BACKUP-1ndb_restore -c host20 --nodeid=4 --backupid=1 --restore-data --backup-path=/BACKUP-1Затем восстановите резервные копии с узлов 6 и 8 на узел 5, вызвав ndb_restore на
host5, так:$>
ndb_restore -c host20 --nodeid=6 --backupid=1 --restore-data --backup-path=/BACKUP-1$>ndb_restore -c host20 --nodeid=8 --backupid=1 --restore-data --backup-path=/BACKUP-1
21.5.24.2.2 Восстановление на большее число узлов, чем в оригинале
Идентификатор узла, указанный для команды ndb_restore, относится к узлу в исходной резервной копии, а не к узлу данных, на который необходимо восстановить данные. При выполнении резервного копирования по методу, описанному в этом разделе, команда ndb_restore подключается к серверу управления и получает список узлов данных в кластере, на который выполняется восстановление. Восстановленные данные распределяются соответственно, так что количество узлов в целевом кластере не нужно знать или вычислять при выполнении резервного копирования.
При изменении общего количества потоков LCP или потоков LQH на узел группы необходимо пересоздать схему из резервной копии, созданной с помощью mysqldump.
-
Создайте резервную копию данных. Это можно сделать, вызвав клиент ndb_mgm из командной строки следующим образом:
$>
ndb_mgm -e "START BACKUP 1"Предполагается, что необходимый идентификатор резервной копии — 1.
-
Создайте резервную копию схемы. В NDB 7.5.2 и более поздних версиях этот шаг необходим только в случае изменения общего количества потоков LCP или LQH на узел группы.
$>
mysqldump --no-data --routines --events --triggers --databases > myschema.sqlВажноПосле создания
NDBродной резервной копии с помощью ndb_mgm не следует вносить какие-либо изменения в схему перед созданием резервной копии схемы, если вы этого не сделали. -
Скопируйте каталог резервной копии на новый кластер. Например, если резервная копия, которую вы хотите восстановить, имеет ID 1 и
BackupDataDir=/backups/node_, то путь к резервной копии на этом узле —nodeid/backups/node_1/BACKUP/BACKUP-1. Внутри этого каталога находятся три файла, перечисленные здесь:BACKUP-1-0.1.DataBACKUP-1.1.ctlBACKUP-1.1.log
Вы должны скопировать весь каталог на новый узел.
Если вам потребовался файл схемы, скопируйте его в местоположение на узле SQL, где он может быть прочитан mysqld.
Нет необходимости восстанавливать резервную копию с определённого узла или узлов.
Для восстановления из только что созданной резервной копии выполните следующие шаги:
-
Восстановите схему.
-
Если вы создали отдельный файл резервной копии схемы с помощью mysqldump, импортируйте этот файл с помощью клиента mysql, аналогично тому, что показано здесь:
$>
mysql < myschema.sqlПри импорте файла схемы может потребоваться указать параметры
--userи--password(и, возможно, другие), помимо показанных, чтобы клиент mysql смог подключиться к серверу MySQL. -
Если вам не понадобилось создавать файл схемы, вы можете пересоздать схему, используя ndb_restore
--restore-meta(краткая форма-m), аналогично тому, что показано здесь:$> ndb_restore --nodeid=1 --backupid=1 --restore-meta --backup-path=/backups/node_1/BACKUP/BACKUP-1
ndb_restore должен иметь возможность связаться с сервером управления; добавьте параметр
--ndb-connectstring, если и по мере необходимости, чтобы сделать это возможным.
-
-
Восстановите данные. Это необходимо сделать для каждого узла данных в исходном кластере, каждый раз используя идентификатор узла этого узла данных. Предполагая, что изначально было 4 узла данных, набор необходимых команд будет выглядеть примерно так:
ndb_restore --nodeid=1 --backupid=1 --restore-data --backup-path=/backups/node_1/BACKUP/BACKUP-1 --disable-indexes ndb_restore --nodeid=2 --backupid=1 --restore-data --backup-path=/backups/node_2/BACKUP/BACKUP-1 --disable-indexes ndb_restore --nodeid=3 --backupid=1 --restore-data --backup-path=/backups/node_3/BACKUP/BACKUP-1 --disable-indexes ndb_restore --nodeid=4 --backupid=1 --restore-data --backup-path=/backups/node_4/BACKUP/BACKUP-1 --disable-indexes
Эти команды можно запустить параллельно.
Убедитесь, что добавили параметр
--ndb-connectstringпо мере необходимости. -
Перестройте индексы. Они были отключены параметром
--disable-indexes, используемым в только что показанных командах. Перестройка индексов предотвращает ошибки из-за того, что восстановление не является согласованным во всех точках. Перестройка индексов также может улучшить производительность в некоторых случаях. Для перестройки индексов выполните следующую команду один раз на одном узле:$>
ndb_restore --nodeid=1 --backupid=1 --backup-path=/backups/node_1/BACKUP/BACKUP-1 --rebuild-indexesКак упоминалось ранее, вам может потребоваться добавить параметр
--ndb-connectstring, чтобы ndb_restore смог связаться с сервером управления.
© 2025 Oracle
Licensed under the GPLv2 License.