mysqlbinlog и восстановление реплики
Добрый день и заранее спасибо за ответы.
Ситуация такая:
Mysql Master - 1шт. Mysql Slave - 1шт. binlog mode - mixed
На днях датабейсер сделал массовый update в базе. При обновлении не был выставлен LIMIT 1000. И соответственно текущий logfile на мастере вырос до 18Гб. Естественно реплика его не смогла съесть, т.к. максимальный размер может быть 1024Мб.
Решил накатить вручную этот лог и предварительно сделал файл с данными для восстановления:
mysqlbinlog /data/mysql/mysql-bin.002678 > /home/db/db-db.sql Файл получился 25Гб.
Когда я изучил содержимое файла возникли вопросы на которые я пока не нашел ответ.
Начало лога, начало первой транзакции:
Потом идут много тысяч строк и commit конец транзакции:
Также в файле есть raw данные измененных строк.
В конце еще 300 других запросов в виде sql запросов и собственно конец файла лога.
Внимание привлекли контрольные суммы CRC32 измененных строк в первой транзакции. Они в комментариях, соответственно не будут обработаны при восстановлении: mysql dbname < file.sql. Да и вообще не выглядят как SQL запросы. Также raw данные
Если его накатить в таком виде - получается реплика потеряет согласованность, т.к. данные raw не попадут в базу.
Решил поэкспериментировать и сделал с параметром -s
mysqlbinlog -s /data/mysql/mysql-bin.002678 > /home/db/db-db.sql чтобы убрать служебные строки из файла для восстановления.
Размер получился 67КБайт. Куда же делись данные первой транзакции и вообще 25Гб? Также raw данные не попали в файл.
Добавил параметры --base64-output=decode-rows -v и выполнил:
mysqlbinlog --base64-output=decode-rows -v /data/mysql/mysql-bin.002615 > /home/db/db-db.sql
Тут уже ситуация получше вышла, добавились закоментареные запросы на изменения строк, как я думаю строк которые были в формате raw. Также исчезли сами raw данные. Вывод diff: http://joxi.ru/MAjb0VkIvME1KA
C помощью sed я глобально убрал комментарии вида"### ". Потом накатил весь получившийся файл в базу. Делаю это первый раз - поэтому озадачен, все ли сделал правильно. Сам еще пока не очень глубоко разбираюсь в mysql.
Собственно вопросы:
1. CRC32 - это контрольная сумма для строк в формате raw?
2. Правильно я сделал восстановление из binlog?
3. Как вы делаете восстановление из binlog в формате mixed? Попадают ли у вас raw данные в базу?