16.4.1.1 Репликация и AUTO_INCREMENT
Базирующаяся на операторах репликация AUTO_INCREMENT, LAST_INSERT_ID() и TIMESTAMP значений выполняется корректно, с учетом следующих исключений:
При использовании репликации на основе операторов до MySQL 5.7.1 столбцы в таблицах реплики должны совпадать с аналогичными столбцами на источнике; то есть, столбцы
AUTO_INCREMENTдолжны быть реплицированы в столбцыAUTO_INCREMENT.Оператор, вызывающий триггер или функцию, которая вызывает обновление столбца
AUTO_INCREMENT, не реплицируется корректно с помощью репликации на основе операторов. Эти операторы помечены как небезопасные. (Ошибка #45677)-
INSERTв таблицу со составным первичным ключом, включающим столбецAUTO_INCREMENT, который не является первым столбцом этого составного ключа, не безопасен для журналирования или репликации на основе операторов. Эти операторы помечены как небезопасные. (Ошибка #11754117, Ошибка #45670)Эта проблема не затрагивает таблицы, использующие движок хранения
InnoDB, так как для таблицы сInnoDBстолбцом требуется по крайней мере один ключ, где столбец автоинкремента является единственным или левым столбцом. -
Добавление столбца
AUTO_INCREMENTв таблицу сALTER TABLEможет не привести к одинаковому порядку строк в реплике и источнике. Это происходит, потому что порядок нумерации строк зависит от используемого движка хранения и порядка вставки строк. Если важен одинаковый порядок на источнике и реплике, строки должны быть отсортированы перед назначением номераAUTO_INCREMENT. Предположим, что вы хотите добавить столбецAUTO_INCREMENTв таблицуt1, которая имеет столбцыcol1иcol2, следующие операторы создадут новую таблицуt2, идентичнуюt1, но со столбцомAUTO_INCREMENT:CREATE TABLE t2 LIKE t1; ALTER TABLE t2 ADD id INT AUTO_INCREMENT PRIMARY KEY; INSERT INTO t2 SELECT * FROM t1 ORDER BY col1, col2;
ВажноДля гарантии одинакового порядка на источнике и реплике, в клаузе
ORDER BYдолжны быть указаны все столбцы таблицыt1.Приведенные инструкции зависят от ограничений
CREATE TABLE ... LIKE: Определения внешних ключей игнорируются, как и опции таблицыDATA DIRECTORYиINDEX DIRECTORY. Если определение таблицы включает какие-либо из этих характеристик, создайтеt2, используя операторCREATE TABLE, идентичный оператору созданияt1, но с добавлением столбцаAUTO_INCREMENT.Независимо от метода создания и заполнения копии со столбцом
AUTO_INCREMENT, последним шагом является удаление исходной таблицы и переименование копии:DROP t1; ALTER TABLE t2 RENAME t1;
См. также Раздел B.3.6.1, «Проблемы с ALTER TABLE».
© 2025 Oracle
Licensed under the GPLv2 License.