Репликация MySQL: временно запретить репликацию определенных операторов SQL на ведомые устройства?

Я хочу подключить и выполнить один (или иногда несколько) SQL-операторов, а НЕ реплицировать их на ведомые устройства.

У меня нет конфигураций репликация-выполнение или репликация-игнорирование, поэтому я не могу use использовать какую-то нереплицированную базу данных для отправки команд. И я знаю о:

set global sql_slave_skip_counter = 1

Но это на раб. Я хотел бы иметь возможность запускать аналогичную команду на ведущем устройстве и не отправлять следующие N команд ведомым устройствам (что, я думаю, также означает, что они не регистрируются в бинарных журналах).


person Nautical    schedule 10.12.2008    source источник


Ответы (2)


SET sql_log_bin=0 это то, что вы ищете. Требуется привилегия SUPER, и будет отключено ведение журнала команд из вашего сеанса, пока вы не установите для него значение 1. См. http://dev.mysql.com/doc/refman/5.0/en/server-session-variables.html#sysvar_sql_log_bin

SET sql_log_bin=0;
UPDATE ... ;
INSERT ... ;
DELETE ... ;
SET sql_log_bin=1 ;
person derobert    schedule 10.12.2008
comment
Вышеупомянутая ссылка старая и мертвая. В конце строки для 5.x вы, вероятно, захотите dev.mysql.com/doc/refman/5.7/en/ - person dland; 03.03.2020

БУДЬ ОСТОРОЖЕН.....!

SET sql_log_bin=0;

Главный сервер MySQL автоматически устанавливает это значение 0 на 1 через некоторое время (примерно через одну минуту). Он не ждет, пока мы явно установим его в 1. Так что, по моему опыту, это небезопасный способ вообще отключить двоичное ведение журнала .....!

person sambanxxx    schedule 08.11.2011
comment
Что, если он запускается в транзакции? - person Roman M; 16.07.2014
comment
Системные переменные не меняют значение волшебным образом, если их оставить в покое. Ваш код делает это явно, просто вы не отладили его, чтобы определить, где и почему. - person dland; 03.03.2020