SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.06.2012 22:52:43

yun
Участник
Зарегистрирован: 04.06.2012
Сообщений: 6

auto_increment и master/slave репликация

Залил базы с мастера на слейв, переключил на позицию в бинлоге мастера, запустил слейв.
При этом ошибка:
Last_SQL_Error: Error 'Duplicate entry '21464680' for key 'PRIMARY'' on query....

С Мастера пришел запрос на insert в таблицу и как видно из ошибки пытается выставить автоинкримент = 21464680 (мастер явно поле с автоинкриментом в логе не отдавал).
При этом в show create table:
) ENGINE=MyISAM AUTO_INCREMENT=21464694 DEFAULT CHARSET=utf8

Т.о. должно сгенерировать номер поля автоинкримента 21464694 но почему-то пытается выставить 21464680. Естественно такой номер уже есть.

Оба сервера Centos6 x86_64 стандартные пакеты. Доп репозитарии не подключены.
rpm -q mysql-server
mysql-server-5.1.61-1.el6_2.1.x86_64

В чем может быть проблема?

Неактивен

 

#2 05.06.2012 00:21:50

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: auto_increment и master/slave репликация

Вероятно слейв запущен с более ранней позиции в бинлоге, чем данные на нем. То есть на слейве уже есть записи с 680 по 693, но он получает команду на вставку 680-ой записи. Посмотрите внимательнее процедуру переноса данных и запуска слейва.

Неактивен

 

#3 05.06.2012 00:42:53

yun
Участник
Зарегистрирован: 04.06.2012
Сообщений: 6

Re: auto_increment и master/slave репликация

Нет, в логе он пишет поля которые переданы с мастера. Поля автоинкримент в этом списке нет. А значит он генерируется средствами слейва. При этом слейв пытается сгенерировать значение которое меньше указаного в свойстве таблицы auto_increment. Собственно это косвенно подтверждается и тем что SET GLOBAL SQL_SLAVE_SKIP_COUNTER не помогает.

Да и позиция лога определяется автоматически - тут ошибки быть не может:

cat dump_master.sh
#!/bin/bash

echo "FLUSH TABLES WITH READ LOCK" | mysql
echo "show master status" | mysql >/tmp/master.status
mysqldump bd1 >/tmp/bd1.sql
mysqldump bd2 >/tmp/bd2.sql
mysqldump bd3 >/tmp/bd3.sql
echo "UNLOCK TABLES" | mysql

Неактивен

 

#4 05.06.2012 01:03:54

yun
Участник
Зарегистрирован: 04.06.2012
Сообщений: 6

Re: auto_increment и master/slave репликация

Решилось когда с мастера начал делать просто копированием через mysqlhotcopy. Тогда все стартануло без проблем, что очень странно.

Неактивен

 

#5 05.06.2012 01:05:23

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: auto_increment и master/slave репликация

Приведите больше деталей: структуру таблиц, запрос, как он в бинлоге отображается.

См. http://dev.mysql.com/doc/refman/5.1/en/ … ement.html
Если ваше поведение не описано среди известных ограничений, значит это новая бага.

Неактивен

 

#6 05.06.2012 01:22:46

yun
Участник
Зарегистрирован: 04.06.2012
Сообщений: 6

Re: auto_increment и master/slave репликация

Структура простая (что касается этого поля) int(11) auto_increment. А вот запрос боюсь уже не получить, система боевая - объемы большие, быстро чистятся.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson