#mysql #sql #mysql-cluster #database-cluster
#mysql #sql #mysql-кластер #база данных-кластер
Вопрос:
Мы используем версию кластера MySQL:
mysql> SELECT VERSION();
------------------------------
| VERSION() |
------------------------------
| 5.6.15-ndb-7.3.4-cluster-gpl |
------------------------------
Попытка создать таблицу
CREATE TABLE xy (
xa VARCHAR(36) NOT NULL DEFAULT '',
xb VARCHAR(255) NOT NULL,
xc TIMESTAMP NOT NULL,
xd VARCHAR(36) DEFAULT NULL,
xe VARCHAR(36) DEFAULT NULL,
xf VARCHAR(255) DEFAULT NULL,
xg VARCHAR(255) DEFAULT NULL,
xh TEXT,
xi BIGINT(20) DEFAULT NULL,
xj VARCHAR(255) DEFAULT NULL,
xk VARCHAR(255) DEFAULT NULL,
xl VARCHAR(255) DEFAULT NULL,
xz VARCHAR(255) DEFAULT NULL,
xy VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (xa)
) engine=ndb;
приводит меня (используя прямой ввод через командную строку):
ERROR 1296 (HY000): Got error 4239 'Trigger with given name already exists' from NDBCLUSTER
и через файл:
ERROR 1296 (HY000) at line 8: Got error 4239 'Trigger with given name already exists' from NDBCLUSTER
Но триггеров mysql нет:
mysql> SHOW triggers;
Empty set (0.00 sec)
и нет таблиц:
mysql> show tables;
Empty set (0.01 sec)
У кого-нибудь есть идея?
Комментарии:
1. Вы пытались изменить имя таблицы? Я имею в виду, что «xy» может уже использоваться чем-то в MySQL.
2. Настоящее имя не xy — оно просто анонимизировано 😉
3. Поэтому имя, которое вы ему дали, может быть уже использовано.
4. Вы уверены, что выполняете правильный файл? Это действительно странно, я никогда раньше не видел подобной ошибки.
5. Я недостаточно знаю о репликации MySQL, чтобы сделать реальное предположение, но я полагаю, что репликация фактически выполняется триггерами. Первое, что я хотел бы проверить, существовала ли таблица с таким именем ранее. Если это так, возможно, когда он был удален, каким-то образом его триггеры не были удалены. Теперь, при попытке создать таблицу с тем же именем, БД автоматически пытается создать для нее триггеры репликации, и сгенерированное имя триггера основано на имени таблицы, отсюда и конфликт. Эти триггеры не будут отображаться,
show triggers
потому что они не являются триггерами, созданными пользователем.
Ответ №1:
Хорошо — Мы поняли!
Достигнут MaxNoOfTriggers
in config.ini.
Из официальной документации -> MaxNoOfTriggers:
Внутренние триггеры обновления, вставки и удаления выделяются для каждого уникального хэш-индекса. (Это означает, что для каждого уникального хэш-индекса создаются три триггера.) Однако для упорядоченного индекса требуется только один объект триггера. Резервные копии также используют три объекта триггера для каждой обычной таблицы в кластере.
Репликация между кластерами также использует внутренние триггеры.
Этот параметр задает максимальное количество объектов триггера в кластере.
Значение по умолчанию равно 768.