У меня есть установка Percona XtraDB Cluster (5.5) с тремя узлами.
Каждую ночь мы закрываем MySQL на одном случайно выбранном узле, чтобы делать резервные копии каталога данных.
Когда наш трафик достаточно загружен, это вызывает пару (2-4) предупреждений об ошибках в строках SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '140577' for key 'PRIMARY'
. Конфликт первичных ключей, очевидно, за исключением того, что мы используем auto_increment
столбцы в качестве первичного ключа в этих таблицах. Поскольку каждый узел имеет смещение, назначенное механизмом кластера, этого не должно происходить.
Я подозреваю, что удаление узла из кластера приводит к тому, что два других узла изменяют свои автоматические смещения приращения, что приводит к их потенциальному конфликту, пока происходит изменение. Я не понимаю, почему это не будет атомарным действием, а также как я могу это исправить.
Кто-нибудь сталкивался с этим? Есть ли способ временно заморозить настройки автоматического увеличения в кластере, чтобы они не перемещались во время процесса резервного копирования или какого-либо другого решения, о котором я не думаю?
Сверху своей головы я бы сказал, что добавляю подчиненное устройство в микс и делаю резервные копии на подчиненном устройстве, не удаляя узел из кластера.
Что происходит, когда вы помещаете узел обратно, он не знает, насколько увеличиваются числа первичных ключей на активных узлах, прежде чем ему удастся получить новую запись, потому что он не будет остывать, пока не догонит другие две реплики. Таким образом, он записывает новую запись и дает ей идентификатор первичного ключа, который уже существует на двух репликах, которые не были выпущены. По сути, узел не должен получать записи, пока не будет синхронизирован.
Я знаю, что это старый пост, и вы, возможно, уже это сделали, но кому-то, кто видит такое поведение с PXC (Percona XtraDB Cluster), кажется, что вы попали в ошибку https://bugs.launchpad.net/percona-xtradb-cluster/+bug/1366997
Обновите PXC до последней версии, которой вы сейчас пользуетесь. Например, если вы используете 5.5.19 до последней версии 5.5. Если вы используете версию 5.6.x, обновите ее до самого последнего обновления.
Была эта проблема на производстве.