дефолт для авто-инкрементного поля ломает репликацию

3 views
Skip to first unread message

A4

unread,
Sep 18, 2007, 6:35:08 AM9/18/07
to ua_mysql
Предположим у нас есть MySQL master-slave репликация, в которой мастер
работает на MySQL 4.0, а все слейвы на MySQL 4.1 и выше.

В принципе нормальная ситуация, т.к. в подобных системах мастер
появляется первым, и возможно на тот момент версии MySQL 4.1 ещё
попросту небыло.

Теперь выполняем примитивный запрос:

mysql> CREATE TABLE mytable (id int UNSIGNED NOT NULL DEFAULT 0
AUTO_INCREMENT PRIMARY KEY)

В результате на всех слей-серверах "падает" репликация.

Почему?
Дело в том, что начиная с версии 4.1, дабы стать ближе к стандартам
SQL, было запрещено default-значение для auto-increment-оно поля.
В результате на мастере запрос успешно выполняется, пишется в binlog,
из которого он попадает на слейв-сервера, которые не могут его
выполнить.

Посему правильно писать:

mysql> CREATE TABLE mytable (id int UNSIGNED AUTO_INCREMENT PRIMARY
KEY)

http://voituk.kiev.ua/2007/09/18/howto-break-mysql-replication/

Reply all
Reply to author
Forward
0 new messages