gpt4 book ai didi

MySQL用于测试环境。有没有办法卡住数据库?

转载 作者:搜寻专家 更新时间:2023-10-30 22:28:43 26 4
gpt4 key购买 nike

我有一个网站,在将我的开发代码投入生产之前我需要做一些单元测试。

我正在考虑编写一些单元测试,但不是将虚假的数据库数据发送回单元测试,而是使用实际的 MySQL 数据库。

但是,我希望测试 MySQL 数据库保持相对静态。也就是说,在页面加载完成后,我希望 MySQL 数据库撤消任何修改数据的查询,例如 INSERTUPDATE 等。这样数据库重置为其旧数据并准备好进行下一次测试。

  • 有没有一种简单的方法可以实现这个想法?还是我应该采取其他方法?
  • 测试严重依赖 MySQL 查询的网站的一些常见行业做法是什么?

最佳答案

正如@Barmar 提到的,您可以在每次测试运行后重新加载数据。这可行,但根据数据的大小,运行 mysqldump 和恢复转储文件可能需要很长时间。

您可以努力为您的测试创建尽可能小的数据集,以减少时间。

您还可以努力组织单元测试,以尽量减少需要恢复数据的次数。我的意思是对您的测试进行分组,这样即使对数据进行了更改,他们也可以继续测试数据库,直到他们真正需要恢复数据,然后进行恢复,然后继续下一组测试。通过仔细安排测试,您不必在每次测试后都进行恢复。

还有一些其他策略:

  • 使用物理备份而不是 mysqldump 备份。使用 Percona XtraBackup要创建备份,然后要恢复,请关闭 mysqld,rsync 将备份文件覆盖到数据目录,chown -R mysql:mysql 文件,然后启动 mysqld。不幸的是,这需要关闭并重新启动 mysqld。

  • 使用 InnoDB transportable tablespaces .如果您使用使表空间可传输的特殊选项对数据库进行物理备份,那么您可以使用几个 ALTER TABLE 命令并逐表替换每个文件表。请参阅文档。不幸的是,我不知道有任何社区工具可以对架构中的所有表执行此操作,您必须自己编写脚本来执行此操作。

  • 使用 Percona feature for "fake changes."我从来没有在单元测试环境中尝试过这个,但我想这是可能的。它实际上是为了帮助在副本上填充缓冲池。这个想法是任何像 INSERT、UPDATE、DELETE 这样的 DML 都将成为空操作。这需要使用 Percona 服务器。而且它可能无法满足您的测试需要,因为您的测试应该编写的任何更改当然不会产生任何更改。

  • LVM snapshots.这可能是您的最佳选择。在开始测试之前加载测试数据,并在那时拍摄文件系统快照。然后在每次测试运行后,将文件系统恢复为快照。这要求您在每次恢复时关闭 mysqld。但是无论您的数据库有多大,执行快照和恢复都非常简单快捷。我见过这种方法用于快速恢复数 TB 的数据库。

关于MySQL用于测试环境。有没有办法卡住数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47191514/

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