Spec-Zone.ru › MySQL 5.7

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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/replication-features-auto-increment.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API