如何将庞大的实时数据库转变为小型测试数据库?

时间:2014-01-09 11:18:19

标签: mysql sql database testing database-migration

我正在为一家公司开发一个API,该公司在使用测试数据维护一个好的测试数据库方面做得不好。 MySQL数据库结构非常庞大和复杂,实时数据库应该在160-200GB左右。

因为我很懒,并且不想从头开始为所有表创建测试数据,我想知道将这么大的数据库变成一个保存所有数据的较小测试数据库的最佳方法是什么与他们的关系以正确的形式。有一种简单的方法可以使用某种脚本来检查数据库模型,并知道在将数据库缩小到更小的大小时需要保留或删除哪种数据?

或者我注定要完成创建自己的测试数据这项繁琐的工作?

3 个答案:

答案 0 :(得分:2)

我建议将实时客户详细信息纳入测试数据库的风险过高并不重要。如果您不小心通过电子邮件或向真实客户收取测试费用,会发生什么情况?

有很多产品,例如RedGate的Data Generator,它会根据您的架构为您创建测试数据(我相信有一个免费试用版,所以您可以检查它是否符合您的需求在提交之前)。

您的其他选择?雇佣一个临时输入数据的人!

ETA:抱歉 - 我刚刚看到你更多地关注MySQL而不是MSSQL,这可能排除了我推荐的工具。快速谷歌产生similar results

答案 1 :(得分:2)

查看Jailer,它将自己描述为“数据库子集和浏览工具”。它专门用于选择数据子集,遵循数据库关系/约束以包括链接表中的所有相关行。要限制导出的数据量,可以在要导出的表上设置WHERE子句。

擦除测试数据以删除客户数据的问题仍然存在,但是一旦您有一个较小的子集可以使用,这将更容易。

答案 2 :(得分:1)

对Liath的建议:

也许这是一个很难的方法,但是你可以只导出你的模式(没有数据),然后使存储过程迭代你的(原始)表并简化:

insert into dest_table (fields) (select * from origin_table where (`external_keys already inserted`) limit 100) 

或者像是一样思考。

感谢@Liath:external_keys already inserted您需要制作一个过滤器,以确保您的测试数据库中已存在此表的任何外部键。因此,您还需要按外部键

按顺序迭代表

另一种方法是导出数据并编辑sql.dump文件以删除不需要的数据(真的很难)