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

Какой формат binlog использовать для репликации MySQL?

Вот-вот начну использовать репликацию MySQL, и мне интересно, какой формат binlog лучше всего использовать? Есть ряд, утверждение и смешанный.

Я собираюсь использовать 5.1.49.

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

Большое спасибо,

Деленда

Репликация на основе операторов - самая быстрая и компактная, но в некоторых случаях она может давать разные (недетерминированные) результаты на ведомых устройствах, чем на ведущем, что приводит к несогласованности. Примером может быть:

UPDATE mytable SET a = a + 1 LIMIT 1;

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

Репликация на основе строк позволяет избежать этой проблемы, реплицируя измененные данные, а не запросы, но в то время как такой оператор, как:

UPDATE mytable SET a = a + 1;

требует репликации всего нескольких байтов для репликации на основе операторов, независимо от того, сколько строк она затрагивает: если она обновляет 1 миллион строк, репликация на основе строк будет реплицировать все 1 миллион строк, что будет намного медленнее и приведет к созданию гораздо больших двоичных журналов.

Смешанный режим переключается между ними, используя тот, который наиболее эффективен или безопасен (например, простые вставки, вероятно, лучше всего выполнять с помощью репликации на основе строк - операторы using могут быть медленнее). Возможность возникновения проблем заключается в распознавании недетерминированных утверждений, что является нетривиальной проблемой.

В итоге:

  • На основе строк: всегда безопасно, возможно, очень медленно и неэффективно во времени и пространстве
  • На основе утверждений: не всегда безопасно, но может быть намного быстрее
  • Смешанный режим: лучшее из обоих миров в теории, но возможно, что это неправильно, что приведет либо к низкой производительности, либо к неверным данным в зависимости от того, каким образом он ошибается!

Официальные документы Вот.

Это тоже старый вопрос: теперь вы должны использовать MySQL 5.5 для любых новых сборок. Я предпочитаю сборки Percona.