2

pt-online-schema-change我想知道使用or运行更改时 binlog 会发生什么gh-ost

因为pt-online-schema-change我读过它复制表并使用一些触发器来应用更改。我不知道它是从一开始就使用新架构创建表,还是在复制表后应用更改?

如果它从一开始就改变了表,那么 binglog 会发生什么?位置和之前的binglog有什么不同吗?

4

1 回答 1

0

pt-online-schema change 复制表结构并将所需的 ALTER TABLE 应用于零行表。这几乎是瞬时的。然后它会创建触发器来镜像原始表的更改。然后它开始将旧数据从原始表复制到新表。

二进制日志会发生什么?它变得相当巨大。CREATE TABLE 和 ALTER TABLE 和 CREATE TRIGGER 非常小。DDL 在 binlog 中始终是基于语句的。触发器创建的 DML 更改和复制旧数据的过程成为 binlog 中的事务。我们更喜欢基于行的二进制日志,所以这些最终会非常庞大​​。

gh-ost 类似,但没有触发器。gh-ost 读取 binlog 以查找应用于旧表的事件,并将这些事件应用于新表。同时,它还会复制旧数据。这些操作一起导致二进制日志中的额外事件量与使用 pt-online-schema-change 时发生的量相似。

因此,您应该在开始这些在线模式更改操作之前检查可用磁盘空间量。它将与要复制的数据量大致成比例地扩展 binlog。当然,您需要临时存储整个表的两个副本(原始版本和更改版本),直到可以在过程结束时删除原始表。

当我的磁盘快满时,我不得不在大型表(500GB+)上运行 pt-online-schema change。它会导致一些紧张的时刻。我必须定期清除二进制日志以获得更多可用空间,因为如果我不这样做,架构更改会将磁盘填充到 100%!这不是我推荐的情况。

于 2022-02-21T22:53:21.167 回答