Повторная репликация Mysql Master-Slave с первичным ключом AUTO_INCREMENT - PullRequest
0 голосов
/ 02 мая 2018

Проблема связана со стандартной настройкой Mysql Master-Slave (ведомое устройство только для чтения, двоичное ведение журнала установлено в ROW), когда одна строка вставляется в основную таблицу с первичным ключом с автоматическим приращением, например, в эту строку , получает ID 4288996, когда одна и та же вставка реплицируется на ведомом устройстве, одна и та же строка становится другой ID 4289032 (поскольку вставка выдается без значения первичного ключа, которое генерируется автоматически).

Теперь проблема возрастает, когда в этой строке в Master вводится оператор UPDATE:

#180430 18:00:12 server id 1  end_log_pos 429933 CRC32 0xd0d85778
Update_rows: table id 260 flags: STMT_END_F
### UPDATE `cmon`.`simple_alarm`
### WHERE
###   @1=4288996
### SET
###   @13=1525104012
###   @15=1
# at 429933
#180430 18:00:12 server id 1  end_log_pos 429964 CRC32 0xdc9f3fa4       Xid = 452035

Поскольку в подчиненном устройстве не существует такой же строки (с другим идентификатором):

'Не удалось выполнить событие Update_rows для таблицы cmon.simple_alarm; Не могу найти запись в 'simple_alarm', Error_code: 1032; ошибка обработчика HA_ERR_KEY_NOT_FOUND; главный журнал события xxxxx_bin_log.000003, end_log_pos 429933 '

Я знаю, почему это проблема, но я не знаю, как ее решить?

1 Ответ

0 голосов
/ 02 мая 2018

Известная проблема

Справочное руководство по MySQL 8.0 / ... / Репликация и AUTO_INCREMENT 17.4.1.1

Оператор, вызывающий триггер или функцию, которая вызывает обновление Столбец AUTO_INCREMENT неправильно реплицируется с помощью репликация на основе операторов . Эти заявления помечены как небезопасные. (Ошибка # 45677)

Попробуйте ведение журнала на основе строк или смешанный тип. Может быть, это будет решено.

...