Как мне запустить запрос в MySQL, не записывая его в бинарный журнал

StackOverflow https://stackoverflow.com/questions/2958479

Вопрос

Я хочу запустить импорт большого файла в 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top