MySQL 二进制日志 - 跳过一个表

Dav*_*rks 9 mysql logs binlog

有没有办法跳过二进制日志中的特定表?

我已将二进制日志配置为每晚备份之间的增量备份策略。但是我们有一个巨大的参考表,我们将每晚从批处理(70GB 表)中更新。此表仅供读取,并且每晚使用mysqlimport.

在这个仅供参考的表的更新过程中,二进制日志导致了相当严重的延迟(尤其是当我进行完整的 70GB 更新时)。基本上它必须做两次 70GB。糟糕。

参考表当前正在使用 MyISAM(我阻止 InnoDB 尝试加载它,因此尝试使用 MyISAM)。

red*_*guy 9

没有 mysql 选项可以忽略二进制日志中的表。

如果您可以将表移动到单独的数据库,您可以使用binlog-ignore-db选项,但这有它的gotchas。您应该了解 MySQL 如何评估复制规则

如果您可以编写一个包装器脚本来加载数据而不是 mysqlimport(联机帮助页说它是 LOAD DATA INFILE 的命令行界面),并且您导入数据的用户可以拥有 SUPER 权限,您可以使用sql_log_bin会话变量喜欢:

    SET @@session.sql_log_bin=0;
    LOAD DATA INFILE 'file_name' 
      -- other LOAD DATA INFILE options ;
    SET @@session.sql_log_bin=1;
Run Code Online (Sandbox Code Playgroud)

这将禁用当前会话的二进制日志记录,加载数据并再次启用二进制日志记录。