Назад | Перейти на главную страницу

Percona-Cluster: процедура резервного копирования и восстановления

Я пытаюсь восстановить полную резервную копию, сделанную с одного узла трехузлового percona-кластера (percona cluster 5.5, galera 2.1, метод wsrep sst - это rsync, только таблицы innodb).

Бэкап брался так:

rm -rf /tmp/backup/mysqldb
innobackupex --user=bkpuser --password=xxxx --galera-info --no-timestamp /tmp/backup/mysqldb/
innobackupex --apply-log --use-memory=2G /tmp/backup/mysqldb/

Процедура восстановления, которую я пытаюсь выполнить, выглядит так:

  1. выключить mysql на всех трех узлах
  2. на первом узле
    1. удалить содержимое каталога данных mysql
    2. удалите mysql redologs / binlogs, файл двойной записи и т. д. (они находятся в отдельной папке)
    3. скопировать обратно файлы табличного пространства базы данных для моего экземпляра базы данных
    4. скопировать обратно файлы табличного пространства базы данных для базы данных mysql
    5. redologs / binlogs, файл двойной записи и т. д.
    6. запустить mysql с wsrep_urls = gcomm:// для инициализации кластера
  3. на втором и третьем узле
    1. удалить redologs / binlogs mysql, файл двойной записи и т. д.
    2. удалять galera.cache и grastate.dat
    3. запустить mysql (wsrep_urls = gcomm://firstnode:port,gcomm://secondnode:port,gcomm://thirdnode:port)
  4. как только кластер будет синхронизирован, перезапустите первый узел с полным wsrep_urls конфигурация

(Я знаю, что wsrep_urls устарел, но я еще не заставил galera работать с wsrep_cluster_address.)

Моя проблема в том, что второй и третий узлы сообщают об ошибках после SST. Для каждой таблицы я вижу эту ошибку:

130225 15:44:43 [ERROR] Cannot find or open table myTestDb/settings from the internal data dictionary of InnoDB though the .frm file for the table exists. Maybe you have deleted and recreated InnoDB data files but have forgotten to delete the corresponding .frm files of InnoDB tables, or you have moved .frm files to another database? or, the table contains indexes that this version of the engine doesn't support. See http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html how you can resolve the problem.

MySQL show tables показывает таблицы как существующие, но при попытке выбрать из них выдает ошибку Table 'myTestDb.settings' does not exist ...

Я попытался удалить файлы локального табличного пространства перед запуском mysql и запросом sst, результат тот же.

Как мне выполнить восстановление? Следует ли мне копировать файлы резервных копий на все узлы?

На поиск ответа у меня ушло много времени. Если вы читаете innobackup.backup.log с узла-донора и наблюдаете за данными, создаваемыми в добавляющем узле, вы получите некоторое представление, почему это происходит.

У меня точно такая же проблема. И в моем случае закомментируйте настроенное значение innodb_data_home_dir и innodb_log_group_home_dir, чтобы решить проблему.

После синхронизации с группой просто включите это значение и скопируйте файл.

Надеюсь это поможет.

Вы не сказали, какой метод SST вы используете. Я полагаю, это xtrabackup?

Симптомы, которые вы описываете на 2-м и 3-м узлах, похожи на отсутствующий (и повторно инициализированный) словарь данных Innodb, который находится в файле ibdata1. Возможно, это не копируется из нужного места на 1-м узле.

Вы упомянули некоторые вещи, такие как журналы trx и двойную запись файлов в «отдельной папке». Какие у вас настройки Innodb в my.cnf? Вы, возможно, устанавливаете innodb_data_home_dir (и это вне вашего стандартного datadir)?

Если так, скорее всего, это ошибка: https://bugs.launchpad.net/percona-xtradb-cluster/+bug/1098566, или, возможно, похожий на него.