我有一个任务,构建一个开发虚拟机模板。
我需要将我公司每种产品的 MySQL 数据库添加到服务器中,以便新开发人员能够针对每种产品进行开发。
大多数数据库都小于 1GB。
但是我有几个很大的数据库(大约 160G) - 但我尝试创建的模板的大小有限,在那里添加 160GB 的数据库是不合理的。
因此,我试图找到正确的方法来从这个庞大的数据库中提取上个月的值并将它们添加到服务器,以便开发人员能够“感受到”在这个数据库上工作的感觉。
有可能做到这样的事吗?怎么做?谢谢!
编辑:
不幸的是,没有单独的主数据库服务器来保存所有开发数据库,也没有要求定期更新数据,我只需要提供与生产服务器相同的数据(在随机时间段)作为新开发人员的沙盒环境。
答案1
如果我理解正确的话,您计划为每个开发环境创建一个单独的数据库副本。
虽然这对于小型数据库来说可能是可行的,但对于大型数据库来说效果就不太好。因此,除非您有充分的理由为每个环境设置单独的数据库,否则最好考虑拥有一个开发数据库的副本,并设置所有开发环境来使用它。
这种方法允许您定期使用最新数据刷新开发数据库,如果有人弄乱了它,您只需再次刷新它即可。
再想象一下这种情况:您的开发人员开始从事某个新项目,需要创建新表。如果您有一份开发数据库的副本,您(或开发人员)将需要创建这些表并用测试数据填充一次。现在想象一下,开发人员意识到初始表结构不是最佳的,需要更改。同样,这需要在单个数据库上完成,而不是可能在数十个环境中完成。
我看到这种方法一次又一次地被应用于大型项目,而且大多数时候效果都很好。
答案2
这在很大程度上取决于数据库中的数据类型。在某些情况下,可能很简单
select * from table where date > ....
而在其他情况下,由于数据结构的原因,无法将其分开。最终,它们可能会混合在一起,很难正确处理。
答案3
我们最近遇到过这种情况,一位客户想要提取数据库的最近 30 天的数据。如果所有表都具有相同的属性,您可以在其中定义日期时间,则可以执行
mysqldump --where='datetimefield>"2014-06-28"'
但他想将新旧数据混合到不同的表中。所以这对他来说不是解决方案,但对你来说可能是解决方案?