Как мне запустить запрос в MySQL, не записывая его в бинарный журнал
-
23-10-2019 - |
Вопрос
Я хочу запустить импорт большого файла в MySQL. Тем не менее, я не хочу, чтобы это было написано в бинарном журнале, потому что импорт займет много времени, и заставит рабы сильно отставать. Я бы предпочел запустить его отдельно на рабах, после факта, потому что это будет намного проще в системе. Рассматриваемая таблица является новой, и поэтому мне не нужно беспокоиться о том, что она выйдет из синхронизации, поскольку у мастера и всех рабов будут одинаковые данные в конце концов, потому что все они импортируют один и тот же файл в итоге. Я также не хочу менять какие-либо варианты Replicate-ignore-* или binlog_ignore-*, потому что им требуется перезапуск рассматриваемых серверов. Есть ли способ запустить один запрос, не записывая его в бинарный журнал?
Я уже знаю ответ, но я не мог найти его очень легко в сети, поэтому я позволю кому -нибудь публиковать ответ, чтобы получить несколько очков повторения. Если в маленьком белом нет ответов, я выложу ответ, который я нашел.
Решение
Вы можете использовать SQL-Log-Bin Переменная сеанса для отключения журнала для текущего сеанса. Просто введите:
SET sql_log_bin = 0;
И все запросы на вашем текущем сеансе не будут отправлены в бинарный журнал. Если вы хотите включить бинарную регистрацию, запустите:
SET sql_log_bin = 1;
Это только для в настоящее время работающего сеанса. Все остальные запросы из всех других соединений все еще будут продолжаться. Кроме того, у вас должны быть супер привилегии для работы.
Другие советы
Если вы хотите сделать это из CLI, попробуйте это, это сработало для меня:
$ mysqldump old_DB | mysql --init-command="SET SQL_LOG_BIN = 0;" new_DB
Возможно, что парамет «инициатор» был добавлен в более новой версии MySQL.