Как запустить запрос в MYSQL, не записывая его в двоичный журнал

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

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

2 ответа

Решение

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

SET sql_log_bin = 0;

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

SET sql_log_bin = 1;

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

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

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

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

Другие вопросы по тегам