我想知道当使用pt-online-schema-change或gh-ost运行一个更改时,binlog会发生什么变化。
对于pt-online-schema-change,我已经看到它复制了表,并使用一些触发器应用这些更改。我不知道它是从一开始就用新模式创建一个表,还是只是在复制表之后应用alter?
如果从一开始就改变了表,那么binglog会发生什么呢?这些位置是否与之前的binglog不同?
发布于 2022-02-21 22:53:21
pt模式更改复制表结构,并将所需的ALTER应用于零行表.这几乎是瞬间的。然后,它创建触发器来根据原始表镜像更改。然后开始将旧数据从原始表复制到新表。
二进制日志发生了什么?它变得相当大。CREATE表、ALTER和CREATE触发器非常小。DDL在binlog中始终是基于语句的。触发器创建的DML更改和复制旧数据的过程成为binlog中的事务。我们更喜欢基于行的二进制日志,因此这些日志最终变得相当庞大。
gh-ost是相似的,但没有触发器。gh-ost读取binlog以查找应用于旧表的事件,并将这些事件应用于新表。同时,它还复制了旧数据。这些操作共同导致在使用pt-online模式更改时,在binlog中产生类似数量的额外事件。
因此,在开始这些在线模式更改操作之前,您应该检查空闲磁盘空间的数量。它将按要复制的数据量的比例展开绑定日志。当然,您需要暂时存储整个表的两个副本--原始版本和修改版本,直到原始表可以在处理结束时删除为止。
当我有一个接近满的磁盘时,我不得不在大型表(500GB+)上运行pt-online模式更改。它会引起一些紧张的时刻。我必须定期清除二进制日志,以获得更多的空闲空间,因为如果不这样做,模式更改将将磁盘填充到100%!这不是我推荐的情况。
https://stackoverflow.com/questions/71213673
复制相似问题