Репликация в MySQL. Шпоргалка для тех кто в теме!

18. июля 2013 MySQL 0

Все действия я произвожу в консоли, но ничего не мешает сделать из этого bash скрипт. Суть простая — копируем нижеприведенный текст в блокнот, меняем переменные в первых строках и поэтапно подсовываем нашему любимому интерпритатору. Итак начинаем:

Для удобства определяем переменные для работы. Действия производим на мастере.

 

Далее в общем-то классика: нам нужно запомнить позицию и бинарный лог-файл на котором сейчас находится чтение, потом сделать резервную копию. Чтобы эти данные были актуальны на момент окончания резервного копирования, мы заблокируем базу данных. Но есть сложность — в случае с большими обычно испльзуется mysqlhotcopy, но у нас база разношерстная и в ней присутствует innodb. Кроме того  заказчика дешевле выключить сервер на 2 минуты, чем делать его доступным только на чтение на 10-15.  Поэтому применяем древнее как мамонт ноухау в виде tar`а!  Последовательность и логика бекапа от этого никоим образом не меняется.

 

Поскольку у нас вместо дампа таровский архив, восстанавливать его придется двумя командами. Первой заливаем, второй разархивируем.

 

#На ведомом сервере выполняем:

Запускаем репликацию:

Проверяем что все ОК

Советы из опыта:

  1. Бинарные логи лучше всего хранить в отдельном от баз месте. Так можно избежать лишних затрат на архивирование.
  2. Настройки innodb на мастере и на ведомом сервере должны совпадать:

    Создание пользователя для репликации:

  3.  
  4. Самые «дорогие» операции нужно минимизировать, в нашем случае нет ничего дороже простоя  — чтобы увеличить время архивирования, желательно выключить все что может лишний раз диск. Перед архивированием проверить свободен ли он например камандами dstat или atop.
  5. Если у вас программисты индусы — рекомендую репликацию перевести в режим ROW-based. Это незначительно увеличит нагрузку на сеть и цпу, но избавит от трудностей связанных с тем что один и тот же stateiment запрос отработает по разному на мастере и слейве. Репликация будет жить!

     
  6. Финальный копипаст:

     

 


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *