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

Восстановление XtraBackup дает дубли на раб?

Недавно мы обновили настройку мастер-мастер MySQL 5.0 до Percona 5.6. Подчиненное устройство перестало работать из-за некоторых сбоев с нашей стороны, но мы подумали, что можем просто исправить это, используя xtrabackup для создания резервной копии с работающего сервера и импорта ее на ведомый. Я пытался сделать это все выходные (отчасти потому, что это огромная база данных с безумным количеством баз данных и таблиц), но безуспешно. Может ли кто-нибудь пролить свет на то, что я здесь делаю неправильно?

Сначала я запускаю следующее на текущем производственном мастере:

ulimit -n 409600 innobackupex --defaults-file=/etc/mysql/debian.cnf /mnt

Когда это будет сделано, я копирую полученный каталог на другой сервер и запускаю:

innobackupex --use-memory=4G --apply-log /srv/restore

В конце концов, он завершится с сообщением ОК. Теперь я восстанавливаю его в базе данных с помощью:

innobackupex --move-back /srv/restore

Все идет хорошо, и я могу снова запустить MySQL (после того, как открою каталог / srv / mysql, который является нашим каталогом данных). Там есть данные, и база данных работает нормально. Теперь я начинаю работать с этой базой данных:

/usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf -e "CHANGE MASTER TO MASTER_HOST='10.x.x.x', MASTER_USER='replication', MASTER_PASSWORD='verysecret', MASTER_AUTO_POSITION=1; START SLAVE"

Ведомый запускается, но сразу останавливается из-за ошибки 1062. После расследования я обнаружил, что запись, которую он пытается применить, была добавлена ​​в главную базу данных сразу после того, как я начал резервное копирование. Я могу это исправить, но сразу получаю новую ошибку.

Мне кажется, что резервная копия не содержала всех последних GTID, а только тех, которые были доступны в начале резервного копирования? Я думал, это именно то, что XtraBackup должен был исправить? Сейчас я не вижу альтернативы тому, чтобы во время резервного копирования в базу данных не производились записи. Я что-то здесь делаю не так? Это должно случиться?

Работает на Debian Wheezy со всеми последними патчами.

Server version: 5.6.25-73.1-log Percona Server (GPL), Release 73.1, Revision 07b797f $ innobackupex --version InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy and Percona LLC and/or its affiliates 2009-2013. All Rights Reserved. $ xtrabackup --version xtrabackup version 2.2.11 based on MySQL server 5.6.24 Linux (x86_64) (revision id: )

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

NewSlave > SET GLOBAL gtid_purged="XXXX";
NewSlave > CHANGE MASTER TO
           MASTER_HOST="10.x.x.x",
           MASTER_USER="replication",
           MASTER_PASSWORD="verysecret",
           MASTER_AUTO_POSITION = 1;
NewSlave > START SLAVE;
NewSlave > SHOW SLAVE STATUS \G;

Источник: https://www.percona.com/doc/percona-xtrabackup/2.1/howtos/recipes_ibkx_gtid.html