Восстановление mysql slave из необработанных файлов Master вместо mysqldump? - PullRequest
1 голос
/ 01 мая 2020

Файлы моего ведомого БД были повреждены (потерян дисковый массив), и теперь мы застряли при попытке восстановления. Базы данных довольно большие (по 100 ГБ каждая), и использование изображений mysqldump позволяет увеличить sh от 40 до 69 ГБ после полного ДНЯ обработки. Мы пробовали отдельные базы данных, и у нас продолжают возникать похожие проблемы. Тот факт, что для перезагрузки БД требуется так много времени, я ищу руководство по использованию «сырых файлов» от мастера для создания ведомого.

Мне удалось получить разрешение на простои обслуживания для клонирования всего / var / lib / mysql от мастера, и мне нужно знать, что НЕ нужно копировать в мое ведомое устройство из этих файлов данных. Я бы взял на себя все. «Раб» потерял только данные (/ data / lib / mysql) и ничего больше. У меня уже включен «skip-slave-start» в my.conf ведомого, поэтому он не будет синхронизироваться в ближайшее время. Я также собрал информацию о мастер-данных, пока все элементы были заблокированы, поэтому у меня есть и эти детали.

Итак, что находится в / var / lib / mysql, что должно быть по-другому между мастером и рабом, прежде чем я попытаюсь перезапустить mysqld раба, а потом запустить раба?

1 Ответ

0 голосов
/ 01 мая 2020

Вам понадобится целое из / var / lib / mysql, и вам не понадобится какое-либо время простоя, если: 1) все ваши mysql файлы, включая binlogs и журналы транзакций, в / var / lib / mysql И 2) у вас есть / var / lib / mysql на LVM (или лучше на ZFS)

Убедитесь, что вы работаете с безопасными настройками (flush_logs_at_trx_commit = 1, sync_binlog = 1).

Предполагая, что вы находитесь в ZFS с данными / mysql, смонтированными в / var / lib / mysql (потому что я не могу вспомнить заклинание LVM из мышечной памяти), вы бы сделали что-то вроде this:

$ sudo mysql
mysql> FLUSH TABLES WITH READ LOCK;
mysql> \! sync
mysql> \! zfs snapshot data/mysql@transfer
mysql> UNLOCK TABLES;

Замените строку «zfs snapshot» выше на соответствующую команду LVM snapshot для вашей системы.

Теперь вы можете передавать содержимое этого снимка с помощью tar (или zfs send) over netcat или s sh.

Очистить / var / lib / mysql на цели до восстановления.

Удалить /var/lib/mysql/master.info на цели после восстановление.

Обратите внимание на последнее имя и размер binlog ПЕРЕД тем, как вы запустите mysqld.

Необязательно, но рекомендуется: установите read_only = 1 в my.cnf на целевом сервере.

Теперь запустите mysqld. Выполнить:

CHANGE MASTER TO ... MASTER_LOG_FILE='<name of latest binlog you noted earlier>', MASTER_LOG_POS=<size if binlog you noted above>;
START SLAVE;

Теперь ваш вновь инициализированный ведомый должен быть запущен и реплицирован.

...