用复制的数据*和*自己的数据创build一个testing数据库

我想创build一个testing数据库,每天使用生产数据库中的数据进行刷新。

但是 ,我想能够在testing数据库中创buildlogging,并保留它们而不是被覆盖。

我想知道是否有一个简单的方法来做到这一点。

这两个数据库运行在同一台服务器上,显然是排除了复制

澄清,这是我想要发生的事情:

  1. testing数据库是使用生产数据创build的
  2. 我创build了一些我想要在testing服务器上运行的testinglogging(基本上我可以创build一些我可以玩的示例logging)
  3. 第二天,数据库被完全刷新,但是当天创build的logging被保留。 那天未被触动的logging被生产数据库中的loggingreplace。

这很复杂,如果删除了生产数据库中的一个logging,我也希望它在testing数据库上也被删除,所以我想删除testing数据库中不再存在于生产数据库中的logging,除非这些logging在testing数据库中创build。

看起来像这样做的唯一方法是有一些表存储关于正在创build的logging的元数据? 举个例子,像这样的东西:

CREATE TABLE MetaDataRecords ( id integer not null primary key auto_increment, tablename varchar(100), action char(1), pk varchar(100) ); DELETE FROM testdb.users WHERE NOT EXISTS (SELECT * from proddb.users WHERE proddb.users.id=testdb.users.id) AND NOT EXISTS (SELECT * from testdb.MetaDataRecords WHERE testdb.MetaDataRecords.pk=testdb.users.pk AND testdb.MetaDataRecords.action='C' AND testdb.MetaDataRecords.tablename='users' ); 

我想你可能会在这里find有用的合并表 。 只需将testing数据保存在一个表格中; 并在其他表中每天都有生产快照; 并把这两个表合并起来。

我一直在这里,并且愿意稍微修改一下我的工作stream程,以便在我的testing数据库中尽量减less应该更换生产数据的风险。

我所做的只是:

  • mysqldump的生产
  • 将SQL注入到转储的末尾,并将其置于文件中(对于文件写入,永远不要太小心)
  • 将此备份还原到testing数据库中。

您注入的SQL应单独维护,也许在另一个脚本中。 这些通常被称为testing夹具 。 为了从数据库实现中抽象出来,并且不要太依赖“魔术”(就你的情况而言,将testing数据库与以前的恢复相比较,以查看已添加的内容,然后查看从实时中删除的内容,交叉引用主/外键钥匙等),这样就会有一个小得多的机会搞砸了,如果你的testing结果是真的,你最终还是会发邮件给你的真实用户。

一个好处(对我来说)就是这样做的:

 UPDATE users SET email = CONCAT('gmailusername+', users.name, '@gmail.com')`; 

这是一个巨大的故障安全,所有其他途径失败(如您的模拟SMTP服务器),邮件滑过(再次,永远不能太小心这些事情)。