gpt4 book ai didi

php - 使用 pt-online-schema-change 是否可以在代码库部署的 "swap"阶段暂停?

转载 作者:行者123 更新时间:2023-11-29 01:57:18 25 4
gpt4 key购买 nike

我正在研究使用 pt-online-schema-change 来协助某些迁移,其中 ALTER TABLE 命令会导致较长的维护窗口。我知道 pt-online-schema-change 将创建表的空副本以执行 ALTER TABLE 命令,然后将行从旧表分批迁移到新表,并创建触发器来管理临时数据更改.

但是在新表与旧表交换的那一刻,是否可以暂停一下,以便我们可以用新的代码库部署来计时?我没有在文档中看到这个问题。显然,我们新版本(使用 Symfony)的 PHP ORM(原则)将期望某个模式就位,如果交换发生在代码库部署之前或之后,将会导致问题。

一个相关的问题是我知道必须在所有子表上更新外键约束,否则它们仍将引用旧表。这是否意味着此阶段已在维护窗口后完成?如果我们将数据迁移的时间安排与特定代码库的发布同时进行,我不明白您如何能够提前做到这一点。

最佳答案

您可以将暂停逻辑的代码写入运行 before_swap_tables 的插件中。

例如(未测试,但这应该给你基本的想法):

package pt_online_schema_change_plugin

sub new() {
open HANDLE, ">>pause_please.txt" or die "$!";
close HANDLE;
}

sub before_swap_tables() {
print "Pausing until you rm pause_please.txt...\n";
while (-f "pause_please.txt") {
sleep(1);
}
}

然后当你准备好后,打开另一个shell窗口来rm文件,然后pt-online-schema-change会继续。

请参阅 documentation 中的“插件”部分了解详情。


回复你的评论:

似乎每个人都必须遇到您当前面临的问题。但你是我听到的第一个要求此功能的人。

大多数人编写的代码可以在模式更改前后读取和写入表。例如,如果您要添加一列,请避免使用 SELECT *INSERT ... VALUES() 语句,这样当出现新列时应用程序不会感到意外.因此,没有必要根据模式更改来安排代码推送时间。

但有时模式更改的性质需要更改代码。例如,重命名列。对于这些必要的情况,几分钟的停机时间是可以接受的。

关于php - 使用 pt-online-schema-change 是否可以在代码库部署的 "swap"阶段暂停?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25331743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com