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/
Процедура восстановления, которую я пытаюсь сделать, выглядит следующим образом:
- закрыть mysql на всех трех узлах
- на первом узле
- удалить содержимое каталога данных MySQL
- удалите mysql redologs/binlogs, файл doublewrite и т. д. (они находятся в отдельной папке)
- скопировать обратно файлы табличного пространства базы данных для моего экземпляра базы данных
- скопировать обратно файлы табличных пространств базы данных для базы данных mysql
- Redologs / binlogs, файл двойной записи и т. д.
- начать MySQL с
wsrep_urls = gcomm://
инициализировать кластер
- на втором и третьем узле
- удалить mysql redologs/binlogs, файл двойной записи и т. д.
- Удалить
galera.cache
а такжеgrastate.dat
- начать MySQL (
wsrep_urls = gcomm://firstnode:port,gcomm://secondnode:port,gcomm://thirdnode:port
)
- как только кластер синхронизирован, перезапустите первый узел с полным
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, тот же результат.
Как мне выполнить восстановление? Должен ли я скопировать обратно файлы резервных копий на все узлы?
2 ответа
Вы не сказали, какой метод 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 или, возможно, похожая на нее.
Мне понадобилось много времени, чтобы узнать ответ. Если вы прочитаете innobackup.backup.log из донорского узла и увидите, что данные создаются в добавляющем узле, вы получите некоторое представление о том, почему это происходит.
У меня точно такая же проблема. А для моего случая закомментируйте настроенное значение innodb_data_home_dir и значение innodb_log_group_home_dir, чтобы решить эту проблему.
После синхронизации с группой просто включите эти значения и скопируйте файл.
Надеюсь это поможет.