Примечания о функциях, связанных с GTID, после обновления с 5.6 до 5.7.
Автор: Цинь Фулан, член команды администраторов баз данных Aikesheng, отвечающий за решение ежедневных проблем проекта и устранение неполадок платформы компании. Администратор базы данных, который любит Интернет, разбирается в фотографии и умеет готовить, не станет хорошим водителем, диди~
Оригинальный контент, созданный сообществом открытого исходного кода Aikeson, не может быть использован без разрешения. Пожалуйста, свяжитесь с редактором и укажите источник для перепечатки.
Эта статья содержит в общей сложности 400 слов, и ее чтение займет 2 минуты.
фон
В финансовой компании есть система, которая только что была перенесена с версии 5.6 на версию 5.7.30. GTID не был включен до миграции, но функции, связанные с GTID, были включены после миграции. CREATE TABLE ... SELECT ...
Когда бизнес использует импортированные данные обычным способом, возникает ошибка: Error Code:1786 (HY000): Mysql Statement violates GTID consistency: CREATE TABLE ... SELECT
.
Принцип задачи
Эта проблема относительно проста. Причина в том, что перенесенный MySQL5.7 использует GTID и включает enforce_gtid_consistency
параметры (строгая согласованность GTID).
Чтобы гарантировать согласованность распределенных транзакций, MySQL использует GTID для уникальной идентификации транзакции. В режиме GTID операторы DDL и DML автоматически генерируют разные GTID для идентификации различных транзакционных операций. Однако CREATE TABLE ... SELECT ...
генерируется только один GTID, а операции DDL и DML объединяются в одно выполнение транзакции. Это приведет к несогласованности данных главного и подчиненного устройств в случае сбоя выполнения инструкции. Включение enforce_gtid_consistency
этого параметра обеспечивает атомарность транзакций GTID.
Официальная документация также объясняет CREATE TABLE ... SELECT ...
эту операцию:
решение
В целях безопасности не рекомендуется отключать этот параметр.
В MySQL5.7 вы можете решить эту проблему, разделив SQL на два предложения, например:
#先创建表
CREATE TABLE ... LIKE...
#再插入数据
INSERT INTO ... SELECT ...
Хотя предыдущий одиночный SQL-код можно легко и быстро перенести в другую таблицу, с точки зрения безопасности это может оказаться немного более проблематичным.
MySQL 8.0
Хорошей новостью является то, что, начиная с MySQL8.0.21, механизмы хранения, поддерживающие атомарный DDL, позволяют использовать CREATE TABLE ... SELECT ...
операторы.
Дополнительные технические статьи можно найти на странице https://opensource.actionsky.com/ .
О SQLE
SQLE от сообщества открытого исходного кода Axon — это инструмент аудита SQL для пользователей и менеджеров баз данных, который поддерживает многосценарный аудит, стандартизированные онлайн-процессы, встроенную поддержку аудита MySQL и масштабируемые типы баз данных.
SQLE получить
тип | адрес |
---|---|
Репозиторий | https://github.com/actiontech/sqle |
документ | https://actiontech.github.io/sqle-docs/ |
выпускать новости | https://github.com/actiontech/sqle/releases |
Документация по разработке плагина аудита данных | https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse |