ОШИБКА 3098 (HY000): таблица не соответствует требованиям внешнего плагина
НАСТРОИТЬ:
- Три узла репликации группы MySQL в главном мастере.
- Все отлично работает. Я могу добавить пользователей / базы данных и вставить / обновить данные.
- Каждый узел привязан к частному IP-адресу.
- Я создал скрипт bash для подключения к mysql для удаления пользователей.
- Удаление базы данных с помощью скрипта работает нормально.
ПРОБЛЕМА:
Следующие команды НЕ будут выполняться. Я могу создавать пользователей и базы данных и удалять базы данных, но не могу удалить пользователей. Я не могу сказать, если это проблема репликации ИЛИ проблема привилегий.
- DELETE FROM mysql.user WHERE user = 'testme123';
- DELETE FROM mysql.db WHERE user = 'testme123';
- УБРАТЬ ПОЛЬЗОВАТЕЛЯ, ЕСЛИ СУЩЕСТВУЕТ 'testme123';
ОШИБКА 3098 (HY000) в строке 1: таблица не соответствует требованиям внешнего плагина.
LOG: [ERROR] Плагин group_replication сообщил: "Пользователь таблицы не использует механизм хранения InnoDB. Это не совместимо с групповой репликацией.
Я получаю ту же ошибку через локальную консоль mysql, тоже вошел в систему как root.
ВОПРОСЫ):
- Что может помешать этому?
- Как я могу устранить неполадки в том, что мне не хватает?
4 ответа
Если вы используете групповую репликацию (в 5.7 или 8.0), вы должны выполнять всю аутентификацию пользователя с помощью команд GRANT/DROP/CREATE USER/etc, а не INSERT / UPDATE / DELETE / etc.
MyISAM не реплицируется в групповой репликации из-за серьезных технических трудностей.
(Приведенные выше комментарии также применимы к Galera / PXC.)
(Предостережение: то, что я сказал, может быть не совсем правдой, но я думаю, что это избавит вас от неприятностей и решит вопрос под рукой.)
Одно из требований групповой репликации —
Every table that is to be replicated by the group must have a defined primary key, or primary key equivalent where the equivalent is a non-null unique key.
[ссылка на сайт]
Итак, если вы используете таблицу без выполнения этого условия, сервер выдаст эту ошибку. Используйте таблицу с основным идентификатором.
У меня тоже есть эта проблема. я нашел этоMySQL Group Replication requires tables must have an explicit primary key defined
.
В моем случае я получил ту же ошибку при восстановлении резервной копии из группы репликации MySQL с одним основным режимом. Я сделал резервную копию, используя--single-transaction
флаг во время mysqldump
cmd.
$ mysqldump -uroot -p<root_password> -h<host> --set-gtid-purged=OFF --single-transaction --all-databases --triggers --routines --events < dump.sql
Здесь см. Использование --single-transaction
флаг проблемы, которую он вызывает.
$ mysqldump --help
...
--single-transaction
Creates a consistent snapshot by dumping all tables in a
single transaction. Works ONLY for tables stored in
storage engines which support multiversioning (currently
only InnoDB does); the dump is NOT guaranteed to be
consistent for other storage engines. While a
--single-transaction dump is in process, to ensure a
valid dump file (correct table contents and binary log
position), no other connection should use the following
statements: ALTER TABLE, DROP TABLE, RENAME TABLE,
TRUNCATE TABLE, as consistent snapshot is not isolated
from them. Option automatically turns off --lock-tables.
...
Итак, прочитав предложение @RickJames, я просто удаляю --single-transaction
флаг из mysqldump
cmd во время резервного копирования, а затем восстановил его в новую группу репликации.
Примечание: версия сервера MySQL была 5.7.25.