【问题标题】:How can I run a test on a production app without leaving trace?如何在生产应用程序上运行测试而不留下痕迹?
【发布时间】:2021-06-24 10:52:40
【问题描述】:

我正在对使用 PHP+MySQL 开发的 Web 应用程序进行一些更改,在测试开发中的所有内容后,我已将其上传到生产环境。但是,我想确保一切正常运行,我可能忘记了从开发到生产的一些更改(数据库连接等)。

如果我运行一些在 MySQL 数据库中插入新行的更改,删除新寄存器并更新 AUTO_INCREMENT 值(以便自动 ID 不会显示测试已经完成和删除),就足以离开没有测试痕迹?

也许问题应该更笼统,我怎样才能测试一旦投入生产,一切都可以完美运行而不留下那些“足迹”?

谢谢!

【问题讨论】:

  • 这对于任何具体的答案来说都太宽泛了,因为我们不知道您可能会留下什么样的足迹。唯一可靠的答案是备份所有您的数据并在之后恢复。这仍然会在任何受影响文件的时间戳上留下痕迹,因此您还需要一个实用程序来存储所有受影响文件的时间戳并在之后恢复它们。可能还有其他我没有想到的痕迹。这需要有多“不可见”?
  • “隐形”没什么大不了的。我只是不想“破坏”生产信息。我知道我必须删除新的 MySQL 表行并更改 AUTO_INCREMENT 以便在用户 #10 之后,例如,我找不到 #12(如果 #11 是已删除的用户),而是选择 #11。也许还有其他类似的提示,或者没有,这就足够了。

标签: mysql database web-applications development-environment production


【解决方案1】:

第一个答案当然是使用工具来比较它们,这样就不会忘记任何东西。但是,如果由于某种原因这是不可能或不可行的,我会这样做:

您的查询形式发生了变化,我猜想以某种方式更新数据库。 在让其他人进行测试之前,您要确保一切都按预期运行。

然后对生产进行备份并将其还原到新数据库中,现在您与生产中的相同。然后运行您的更新查询(您想在生产中运行)并针对这个新数据库运行您的代码。这将与更改后的生产完全相同。如果它有效,您可以在生产环境中安全地执行相同的操作,或者如果已进行更改,则让用户进入。

如果这不是您想要的,并且由于某种原因您需要在实际的生产服务器中运行,那么我们无能为力。您的服务器可能会做一些我们不知道的事情。

插入新行(如果您知道所有已更新的行,则可以通过将 auto_increment 重置为正确值来删除和修复) 触发器(当您添加/修改/删除时)数据触发器可能会更改数据库中的其他数据。 删除记录,无法撤消

您还面临代码可能因此更改(或未知错误)而崩溃的风险,这会导致方法在完成之前退出,因此某些行可能已更改,但其他行不会更改。

如果不完全了解您的系统,就无法了解这一切。

当然,另一种方法是现在进行备份并测试您的东西,然后删除生产并使用备份恢复它。但这不是我自己会尝试或推荐其他人做的事情......

【讨论】:

    猜你喜欢
    • 2013-09-11
    • 2020-10-31
    • 2020-03-04
    • 2011-01-31
    • 2011-09-27
    • 1970-01-01
    • 2015-07-08
    • 2018-11-01
    • 2013-09-07
    相关资源
    最近更新 更多