pt-online-schema-change
我想知道使用or运行更改时 binlog 会发生什么gh-ost
?
因为pt-online-schema-change
我读过它复制表并使用一些触发器来应用更改。我不知道它是从一开始就使用新架构创建表,还是在复制表后应用更改?
如果它从一开始就改变了表,那么 binglog 会发生什么?位置和之前的binglog有什么不同吗?
pt-online-schema-change
我想知道使用or运行更改时 binlog 会发生什么gh-ost
?
因为pt-online-schema-change
我读过它复制表并使用一些触发器来应用更改。我不知道它是从一开始就使用新架构创建表,还是在复制表后应用更改?
如果它从一开始就改变了表,那么 binglog 会发生什么?位置和之前的binglog有什么不同吗?
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%!这不是我推荐的情况。