Galera: Отстаньте ИЗМЕНЯЮТСЯ, не блокируя весь сервер

У меня есть galera кластер с 3 узлами с несколькими сотнями баз данных, обслуживающих различные клиенты.

Я только использую galera в качестве простого способа обработать репликацию и обработку отказа. Я на самом деле не использую несколько ведущих устройств сразу.

Я должен работать, довольно дорогое ИЗМЕНЯЮТСЯ на некоторых таблицах в каждой базе данных. Как правило, у меня был бы сценарий, который запустил скрипт обновления на каждой базе данных, один за другим, и просто выключите каждый сайт по одному.

Но с этим galera кластером, любой медленный DDL привел к полному, соединяют все базы данных, не только ту, против которой он выполняется. В основном это означает каждый раз, когда я должен выполнить обновление, все идут офлайн в течение всего времени, это берет меня для выполнения обновления для всех.

Я знаю, что существует wsrep_OSU_method, но изменяющий это на RSU имеет проблемы сами по себе, и я не думаю, что он помогает.

Существует ли только способ отключить блокировку? Или, по крайней мере, сделайте это блокировкой уровня базы данных, а не блокировкой уровня сервера?

Что, если бы я должен был отключить свои другие узлы в кластере при выполнении запроса - это все еще привело бы к глобальной блокировке? Как я сказал, я на самом деле не использую несколько ведущих устройств, так в этом случае, имение других узлов офлайн в течение нескольких минут хорошо (принимающий, возражают ли автоматизированные обычные, что процесс происходит, когда я возвратил их).

3
задан 2 February 2015 в 20:32
1 ответ

Вам повезло! Percona создает инструмент под названием pt-online-schema-change как раз для такого рода ситуаций.

pt-online-schema-change имитирует способ, которым MySQL изменяет таблицы внутренне, но работает с копией таблицы, которую вы хотите изменить. Это означает, что исходная таблица не заблокирована, и клиенты могут продолжать читать и изменять данные в ней.

pt-online-schema-change работает, создавая пустую копию таблицы для изменения, изменяя ее по желанию и затем копирование строк из исходной таблицы в новую таблицу. Когда копирование завершено, исходная таблица удаляется и заменяется новой. По умолчанию он также удаляет исходную таблицу.

Хотя он создан Percona, он работает с любыми основными вариантами MySQL.

1
ответ дан 3 December 2019 в 07:27

Теги

Похожие вопросы