Как запустить запрос в MYSQL без записи в двоичный журнал - PullRequest
32 голосов
/ 02 июня 2010

Я хочу запустить импорт большого файла в MySQL. Однако я не хочу, чтобы это записывалось в двоичный журнал, потому что импорт займет много времени и приведет к тому, что ведомые будут отставать. Я предпочел бы запустить его отдельно на рабах, после факта, потому что это будет намного проще в системе. Рассматриваемая таблица является новой, и поэтому мне не нужно беспокоиться о том, что она выйдет из синхронизации, поскольку главный и все ведомые устройства в конце будут иметь одинаковые данные, поскольку все они будут импортировать один и тот же файл в конце концов. Я также не хочу изменять какие-либо параметры replicate-ignore- * или binlog_ignore- *, потому что они требуют перезапуска рассматриваемых серверов. Есть ли способ выполнить один запрос, не записывая его в двоичный журнал?

Я уже знаю ответ, но я не мог найти его очень легко в сети, поэтому я позволяю кому-нибудь опубликовать ответ, чтобы получить некоторые очки за повторение. Если в белом цвете нет ответов, я выложу ответ, который нашел.

Ответы [ 2 ]

53 голосов
/ 02 июня 2010

Вы можете использовать переменную сеанса sql-log-bin , чтобы отключить ведение журнала для текущего сеанса. Просто введите:

SET sql_log_bin = 0;

и все запросы в текущем сеансе не будут отправляться в двоичный журнал. Если вы хотите снова включить двоичное ведение журнала, запустите:

SET sql_log_bin = 1;

Это только для текущего сеанса, в котором вы находитесь. Все остальные запросы от всех других подключений будут по-прежнему регистрироваться. Кроме того, вы должны иметь привилегии SUPER, чтобы это работало.

19 голосов
/ 02 февраля 2015

Если вы хотите сделать это из кли, попробуйте это, у меня это сработало:

$ mysqldump old_DB | mysql --init-command="SET SQL_LOG_BIN = 0;" new_DB

Возможно, что параметр "init-command" был добавлен в более новую версию MySQL.

...