ОШИБКА 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.

Другие вопросы по тегам