Записки ИТ-диверсанта: Как “сломать” MySQL-репликацию
Рубрика: MySQL | 18 September 2007, 08:44 |
Vadim Voituk
… или пособие о том, как не нужно делать :)
Предположим у нас есть MySQL master-slave репликация, в которой мастер работает на MySQL 4.0, а все слейвы на MySQL 4.1 и выше.
В принципе нормальная ситуация, т.к. в подобных системах мастер появляется первым, и возможно на тот момент версии MySQL 4.1 ещё попросту небыло.
Теперь выполняем примитивный запрос:
[sql]mysql> CREATE TABLE mytable (id int unsigned not null default 0 auto_increment primary key)[/sql]
В результате на всех слей-серверах “падает” репликация.
Почему?
Дело в том, что начиная с версии 4.1, дабы стать ближе к стандартам SQL, было запрещено default-значение для auto-increment-оно поля.
В результате на мастере запрос успешно выполняется, пишется в binlog, из которого он попадает на слейв-сервера, которые не могут его выполнить.
Посему правильно писать:
[sql]mysql> CREATE TABLE mytable (id int unsigned auto_increment primary key)[/sql]

Вбил несколько твоих постов по MySQL в гугл-группу UA MySQL, если ты не против.
C чего бы мне быть против? Тем более ссылки на оригиналы сохранены :)
Ну дык реклама на братский сайт – это всегда хорошо :)