Что на самом деле реплицируется на подчиненное устройство MySQL?

У меня есть два сервера MySQL, настроенные в настройке репликации с несколькими мастерами. Каждый является рабом и господином для другого. Моему приложению требуется, чтобы некоторые большие запросы выполнялись в фоновом режиме, а результаты этих запросов использовались для заполнения таблицы. Я подумал, что могу запускать эти большие запросы на одном сервере, а внешний интерфейс приложения использовать другой. Таким образом, приложение не будет замедляться, пока сервер выполняет эти запросы.

Эти запросы очень большие INSERT .... SELECT. С моей настройкой репликации кажется, что когда один сервер завершает запрос, вместо того, чтобы просто отправлять INSERT подчиненному, он запускает исходный большой INSERT/SELECT.

Это происходит на самом деле? Или есть способ узнать, какие команды были отправлены ведомому от ведущего, чтобы убедиться, что это поведение? Единственное, что я могу сказать, это от загрузки процессора.

Есть ли способ для ведомого устройства получить результат INSERT только из команды INSERT... SELECT, запущенной на ведущем устройстве?


person Brad    schedule 13.03.2011    source источник


Ответы (2)


Это происходит на самом деле?

Наверное.

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

Что ж, вы могли бы разобрать binlog, но я ожидаю, что чтение вариантов формата репликации будет вызывать гораздо меньше головной боли.

Вероятно, вы находитесь в режиме на основе операторов, который веками использовался по умолчанию. Вы хотите быть в режиме на основе строк или гибридном режиме, если эти операторы INSERT INTO ... SELECT вызывают затруднения. Эти параметры доступны только в MySQL 5.1 или выше.

person Charles    schedule 13.03.2011
comment
Предупреждение о репликации на основе строк: генерируемые двоичные журналы обычно намного больше, чем при репликации на основе операторов. - person RolandoMySQLDBA; 14.03.2011
comment
Вы можете использовать такой инструмент, как mytop, который покажет вам запросы, выполняемые как на MASTER, так и на SLAVE. Вы также можете напрямую запустить SHOW PROCESSLIST; Существует компромисс, который следует учитывать между операторами и строками. Я хотел написать о них, но приведенная выше ссылка достаточно хороша для чтения. - person Collector; 09.02.2012

Фактические запросы выполняются. Единственный способ обойти INSERT...SELECT — это разбить их самостоятельно. Запустите выбор, сохраните результат в памяти, затем выполните массовую вставку.

person Brent Baisley    schedule 13.03.2011