Вот-вот начну использовать репликацию 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.