Наша база данных MySQL стала довольно большой, и я работаю с основной репликацией. Репликация нарушена. Я пытаюсь восстановить второй мастер без зависания первого мастера при выполнении mysqldump. База данных достаточно велика, поэтому дамп занимает несколько часов, и я не могу так долго отключать базу данных.
Как я могу восстановить репликацию MySQL, не сбрасывая мастер?
Взгляните на Набор инструментов Percona. pt-table-checksum
может помочь вам обнаружить рассинхронизацию таблиц, и вы можете использовать pt-table-sync
потом.
Добавляя к ответу @quanta, если вам не удалось попытаться сравнить и исправить репликацию, вы можете использовать инструмент innobackupex, который поставляется с Percona Xtra-Backup инструмент для создания быстрой копии вашего мастера, которую вы можете восстановить на подчиненном. (требует времени для запуска, но блокирует таблицы на гораздо меньшее время, чем mysqldump
)
В основном innobackupex работает как с таблицами innodb, так и с myisam, и использует преимущества базовых реализаций для значительного сокращения времени экспорта для создания согласованных резервных копий с минимальным временем блокировки.
Есть пошаговый пример создания ведомого устройства из мастера на сайте; http://www.percona.com/doc/percona-xtrabackup/howtos/setting_up_replication.html
Предложение Тома Х тоже здорово. Если вы можете восстановить работу Xtra, это очень хорошо. Я не уверен, что лучше в этом случае, было бы полезно знать:
Версия MySQL All InnoDB? Все MyISAM? Или смешанные? Если InnoDB, вы используете файл для таблицы? Насколько большой большой? (50 ГБ против 500 ГБ?)
Если по какой-то причине вы не можете заставить работать Xtrabackup или совет @quanta с инструментами pt, вам, возможно, придется пойти по старой школе и остановить mysql и скопировать каталог данных на подчиненное устройство, отрегулировать соответствующим образом и начать повторное резервное копирование. Если вы имеете дело с сотнями ГБ и вам нужно сделать копию по сети, И у вас есть многоядерные / ЦП, вы можете посмотреть, используя pigz для своей копии http://zlib.net/pigz/ Это помогло нам, когда копирование файла дампа ИЛИ каталога занимало 4,5 часа, сократившись до 2 часов.
Удачи, я знаю, насколько это может вызвать стресс.
Если раздел mysql находится на LVM, вы можете mylvmbackup. Он сделает снимок и сохранит координаты. Самый быстрый способ восстановить mysql - использовать резервную копию каталога данных. Затем вы можете запустить оптимизацию для оптимизации.
Если у вас нет LVM и вы можете выключить сервер mysql.
1. Сделайте блокировку чтения на мастере и запишите положение.
2. Завершение работы mysql.
3. Скопируйте каталог данных на целевой компьютер. Вы можете создать локальную копию каталога данных, что обычно быстрее, чем передача по сети, чтобы минимизировать время простоя mysql.
4. Запустите mysql.
5. На целевой машине убедитесь, что настройки ib_logfile такие же, как и у мастера, иначе mysql будет жаловаться.
В редких случаях копирование данных происходит некорректно, поэтому может потребоваться повторить попытку.