从生产数据库(不同的机器和服务器)创建一个测试数据库

Jor*_*ter 1 mysql postgresql sql-server testing backup

我想在单独的服务器上设置一个测试数据库。生产数据库是 MS SQL Server,测试服务器是 *nix 机器,所以我想让测试服务器运行 PostgreSQL 或 MySQL。

数据集非常大;有些表有 30k+ 行,并且有很多表。

一些表根本没有太大变化,并且出于测试目的,许多表可以是空的,因此理想情况下,某种可以从数据库复制部分但不是全部记录的解决方案将是理想的。

除此之外,我可能只是在同一台服务器上制作生产数据库的测试副本,而不是将测试数据库服务器放在开发服务器上。假设测试数据库上的负载相对较小,在与生产服务器相同的服务器上托管测试数据库是否存在潜在问题?

如果我从生产环境复制 - > 在 MS SQL Server 中进行测试,是否可以设置某种自动化脚本来选择性地仅复制某些记录(例如,仅某些表中的最后 1k 行,而其他表中没有,以及选定的几行中的所有行)?有没有办法将其设置为选择性备份,然后使用该备份生成测试数据库?

附加信息

这里测试的只是代码,而不是数据库,甚至不是数据库的接口。代码 (Django) 使用 ORM,因此使用哪个 RDBMS 并不重要。我很乐意假设,如果我调用.save()它,无论数据库如何,它都可以工作;我担心的是我是否正确设置了表单、实用程序函数、数据导入等,所有这些都是通过 Django 的关系模型系统抽象出来的,该系统已被证明对 RDBMS 完全无动于衷(实际上,在一个的生产版本中)我的网站同时从 MySQL 和 SQL Server 数据库中提取(一个包含旧数据)。

Mar*_*ith 5

除了我的评论之外,尽可能礼貌地说,这是完成工作的一种适度疯狂的方法。

  • 不管 ORM 有多么强大,您本质上都是通过更改 RDMS 来改变系统的行为。
  • 您的 ORM 可以与两个不同的数据库系统对话,这与两个平台上的同一个数据库(即模式)不同。您当然可以创建一个与 RDBMS 无关的应用程序,但您永远不会发布它只针对一个应用程序进行测试,对吗?
  • 为了适应 RDBMS 的变化,您创建了一堆不必要的 ETL 工作来重新创建数据库对象,管理类型更改,然后最终移动数据。

假设测试数据库上的负载相对较小,在与生产服务器相同的服务器上托管测试数据库是否存在潜在问题?

可以通过适当的安全权分离降低混合开发和生产的固有风险,但会发生事故、人们犯错、点击错误的按钮。如果服务器的规格很合适,并且您 100% 确信您的测试不会给服务器带来过度负载,您可以考虑与生产实例并排安装第二个 SQL 实例,但要确保所有相关方先接受风险。

备择方案: