我想创build一个testing数据库,每天使用生产数据库中的数据进行刷新。
但是 ,我想能够在testing数据库中创buildlogging,并保留它们而不是被覆盖。
我想知道是否有一个简单的方法来做到这一点。
这两个数据库运行在同一台服务器上,显然是排除了复制?
澄清,这是我想要发生的事情:
这很复杂,如果删除了生产数据库中的一个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夹具 。 为了从数据库实现中抽象出来,并且不要太依赖“魔术”(就你的情况而言,将testing数据库与以前的恢复相比较,以查看已添加的内容,然后查看从实时中删除的内容,交叉引用主/外键钥匙等),这样就会有一个小得多的机会搞砸了,如果你的testing结果是真的,你最终还是会发邮件给你的真实用户。
一个好处(对我来说)就是这样做的:
UPDATE users SET email = CONCAT('gmailusername+', users.name, '@gmail.com')`;
这是一个巨大的故障安全,所有其他途径失败(如您的模拟SMTP服务器),邮件滑过(再次,永远不能太小心这些事情)。