35

我想将一个大文件导入 MySQL。但是,我不希望它写入二进制日志,因为导入会花费很长时间,并且会导致 slave 远远落后。事实上,我宁愿在奴隶上单独运行它,因为它在系统上会容易得多。有问题的表是一个新表,因此我不必担心它会不同步,因为主服务器和所有从服务器最终将拥有相同的数据,因为它们都会导入相同的文件最终。我也不想更改任何 replicate-ignore-* 或 binlog_ignore-* 选项,因为它们需要重新启动相关服务器。有没有一种方法可以运行单个查询而不将其写入二进制日志?

我已经知道答案了,但是我在网上找不到很容易,所以我让某人发布答案以获得一些代表点。如果没有小白的答案,我会发布我找到的答案。

4

2 回答 2

57

您可以使用sql-log-bin会话变量来关闭当前会话的日志记录。只需输入:

SET sql_log_bin = 0;

并且您当前会话上的所有查询都不会发送到二进制日志。如果要重新打开二进制日志记录,请运行:

SET sql_log_bin = 1;

这仅适用于您所在的当前正在运行的会话。来自所有其他连接的所有其他查询仍将继续被记录。此外,您必须拥有 SUPER 权限才能使其正常工作。

于 2010-06-02T14:54:22.833 回答
24

如果您想从 cli 执行此操作,请尝试此操作,它对我有用:

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

可能在较新的 MySQL 版本中添加了“init-command”参数。

于 2015-02-02T15:15:16.810 回答