使用 pt-online-schema-change 或 gh-ost 更改 table 时 binlog 会发生什么

what happens to binlog when alter a table using pt-online-schema-change or gh-ost

我想知道当 运行 使用 pt-online-schema-changegh-ost 进行更改时,binlog 会发生什么情况?

对于 pt-online-schema-change 我已经读到它复制了 table 并使用一些触发器来应用更改。我不知道它是否从一开始就使用新架构创建了一个 table,或者它只是在复制 table?

之后应用了更改

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

pt-online-schema 更改复制 table 结构并将所需的 ALTER TABLE 应用于 zero-row table。这几乎是瞬时的。然后它创建触发器以根据原始 table 镜像更改。然后它开始将旧数据从原始 table 复制到新的 table.

二进制日志会发生什么变化?它变得相当巨大。 CREATE TABLE 和 ALTER TABLE 以及 CREATE TRIGGER 非常小。 DDL在binlog中总是statement-based。触发器创建的 DML 更改和复制旧数据的过程成为 binlog 中的事务。我们更喜欢 row-based 二进制日志,所以它们最终会变得非常庞大。

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

时发生的数量相似

因此,在开始这些在线架构更改操作之前,您应该检查可用磁盘的数量 space。它将大致与要复制的数据量成比例地扩展二进制日志。当然,您需要暂时存储整个 table 的两个副本——原始版本和修改后的版本,直到可以在过程结束时删除原始 table。

当我的磁盘快满时,我不得不 运行 pt-online-schema 更改大型 tables (500GB+)。它会导致一些紧张的时刻。我不得不定期 PURGE BINARY LOGS 以获得更多免费 space,因为如果我不这样做,架构更改会将磁盘填满 100%!这不是我推荐的情况。