原文地址:Is AutoUpgrade resumable?
原文作者:Daniel
简短的回答:是的!
最近,我被问到几个类似的问题:
如果我与 AutoUpgrade 的 SSH 会话丢失会怎样?(参见附录)
如果 AutoUpgrade 崩溃会怎样?
如果我错误地退出控制台会怎样?
首先,不要惊慌。其次,只需使用相同的命令行重新启动 AutoUpgrade。在启动过程中,AutoUpgrade 将确定它应该恢复丢失的会话,并将重新启动升级。

当 AutoUpgrade 终止或终止时,它启动的数据库升级也会随之终止。如果您丢失了 SSH 会话,可能会发生这种情况。数据库升级停止,但数据库仍在运行,很可能处于UPGRADE模式。如果您错误地退出 AutoUpgrade(键入exit在作业控制台中),它将首先停止升级,然后关闭数据库。无论如何,当您之后重新启动 AutoUpgrade 时,它会发现之前的 AutoUpgrade 会话正在运行。它将从上一个会话中恢复信息,并在需要时重新启动数据库。之后,它将重新启动升级。如果之前的数据库升级是在第 54 阶段,则 AutoUpgrade 将从第 54 阶段重新开始。这意味着升级中的所有先前工作都将保留,您可以继续进行,就像什么都没发生一样。
不恢复上一个会话
如果您出于某种原因不希望 AutoUpgrade 恢复上一个会话。让我们假设 AutoUpgrade 崩溃了,而您决定恢复数据库。现在你想重新开始。在这种情况下,您需要清除恢复数据,否则 AutoUpgrade 会混淆。
您可以在文档中阅读有关参数的更多信息。
首选小锤子
clear_recovery_data您可以通过在命令行上添加来清除特定作业的恢复,并使用jobs参数来明确必须清除哪些作业恢复数据。
$ java -jar autoupgrade.jar -config PROD.cfg -mode analyze -clear_recovery_data -jobs 100,101,102
现在,自动升级将再次从头开始,但仅限于指定的作业。
大锤子
如果您不指定jobs参数,则 AutoUpgrade 将清除所有作业的恢复数据:
$ java -jar autoupgrade.jar -config PROD.cfg -mode analyze -clear_recovery_data
请注意,配置文件中指定的所有升级都会发生这种情况。请记住,AutoUpgrade 的一大好处是一个配置文件可用于升级 10 或 100 个数据库。
大锤
我会推荐以前的锤子,但使用这种方法作为最后的解决方案:删除 AutoUpgrade 使用的所有文件。
首先,删除 中指定的目录global.autoupg_log_dir。接下来,删除 中指定的目录
请注意,您正在清除 AutoUpgrade 使用的所有信息。如果您对多个 AutoUpgrade 会话使用相同的全局日志记录目录(我不建议这样做),那么您将把事情搞砸。但是,如果您只是在服务器上升级这个特定的数据库,那么您可以安全地删除目录以重新开始。
恢复测试数据库——重新开始
很多时候,测试数据库会升级多次。即使在成功升级后,您也可能希望使用不同的设置重试升级。如果您使用 AutoUpgrade,则必须按照上面的说明清除恢复数据。AutoUpgrade 不知道您已恢复数据库。据它所知,之前的升级是成功的。
结论
恢复 AutoUpgrade 会话非常简单。只需使用相同的命令行启动 AutoUpgrade。它识别先前的 AutoUpgrade 会话,并自动恢复。之前的所有工作都已恢复,升级将从停止的地方恢复。
附录
丢失 SSH 会话
我从几个人那里听说他们经历了 SSH 会话超时,因为升级时 AutoUpgrade 没有产生任何屏幕输出。我们已经制定了一些常规屏幕输出的计划,因此应该避免这种情况。
在实现之前,我建议您查看SSH中的keep alive选项:
$ man ssh
就个人而言,我总是以这种方式启动 SSH,您可以将其放入您的SSH 配置中:
ssh -o ServerAliveInterval=300```




