【问题标题】:How can I use the TRUNCATE sentence avoiding MySql to write it into the binlog?如何使用 TRUNCATE 语句避免 MySql 将其写入 binlog?
【发布时间】:2010-09-15 15:13:55
【问题描述】:

似乎 MySQL 不支持 TRUNCATE 的标志“NO_WRITE_TO_BINLOG”。所以我必须等到延迟为0,然后停止复制,对表进行TRUNCATE,重置master,然后再次开始复制。真的很痛苦。还有什么建议吗?

【问题讨论】:

    标签: mysql database replication binlog


    【解决方案1】:

    不应轻易使用 TRUNCATE,因为它本质上只是将数据丢弃在地板上,而没有记录它这样做的事实。它在事务上是不安全的并且无法从中恢复,因此它与复制不兼容。即使您设法在复制设置中使用 TRUNCATE,您复制的数据也将损坏,或者充其量是无效的。

    【讨论】:

    • 是的,我知道,Truncate 不是复制中常用的语句。然而,在这种特殊情况下,它的工作原理很迷人。谢谢!
    【解决方案2】:

    您可以使用该命令为会话禁用二进制日志记录以执行您想要的操作。

    设置 SQL_LOG_BIN = 0; 截断表; 设置 SQL_LOG_BIN = 1;

    这确实需要您拥有 SUPER 特权,因为您通过不将 TRUNCATE 发送到从属服务器来有效地破坏复制。

    【讨论】:

      【解决方案3】:

      TRUNCATE 是相当严厉的。只需一个 DELETE 查询就可以解决吗?

      【讨论】:

      • 不,我有 6 个数据库,每个数据库有 40 多个表,有些表有超过 500 万行。删除几乎是不可能的。谢谢
      猜你喜欢
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多