Spec-Zone.ru › MySQL 9.2

19.5.1.1 Репликация и AUTO_INCREMENT

Базирующаяся на операторах репликация значений AUTO_INCREMENT, LAST_INSERT_ID() и TIMESTAMP выполняется с учетом следующих исключений:

  • Оператор, вызывающий триггер или функцию, которая приводит к обновлению столбца 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-9.2-en/replication-features-auto-increment.html

Spec-Zone.ru

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