使用pt-osc工具避免DDL引起的主从延迟

直接使用ALERT语句修改表结构时,如果表特别大,那么执行时间将很久,并且会引发主从延迟,根据经验,大概每GB导致100秒延迟。

为了避免该问题,尝试使用pt-online-schema-change工具,该工具支持检测所有从库的延迟,如果达到指定的延迟时间则暂停数据复制进行等待。使用该工具还有一个优势,即其修改表结构时不会阻塞该表的写操作。 据说还有文艺青年用该工具来消除某些表主从数据不一致问题。

该工具常用参数实例如下:

$ pt-online-schema-change -u root --ask-pass -h 172.16.x.x D=database,t=table --alter "CHANGE test test varchar(32) NOT NULL DEFAULT '' AFTER id, ADD COLUMN name VARCHAR(16) NOT NULL DEFAULT '' AFTER test" --chunk-size=100k --chunk-time=5 --max-lag=100s --check-interval=1m --nodrop-old-table --print --dry-run
  1. 参数具体值需要根据具体信息进行调整,首先执行上述语句确定修改语句没有硬伤,之后将--dry-run替换成--execute进行实际执行。
  2. 由于使用了--nodrop-old-table,原始表会保留,确认语句成功后手工删除原始表。
  3. 如果某列指定为NOT NULL,那么一定需要默认值,这个问题dry-run的时候不会报错,但实际执行就失败了。
  4. 这种方法比直接修改表结构慢一点,每GB数据大约2.5分钟。
  5. 由于执行时间很长,为了防止网络中断引发风险,建议通过nohup或者screen执行。
Loading Disqus comments...
Table of Contents