2 回答

TA贡献1757条经验 获得超8个赞
严格来说,答案是否定的,您不能以这种方式更改数据的内容,因为备份方法会获取表列表并将它们按原样转储到文件中。嗯,这正是您对备份解决方案的期望。
然而,您可以做的是创建包含您所需的替换逻辑的视图。然后您可以使用备份方法来备份视图,而不是表。
否则,您需要在普通查询中编写逻辑或在 php 代码中实现它并自己创建转储文件。

TA贡献1772条经验 获得超6个赞
尝试像这样改变运行中的数据将是“不可取”和“不可能”的混合体。我所做的就是首先将数据库克隆到暂存位置,然后运行 PII 和其他敏感信息的数据清理脚本。然后您可以将其克隆到开发环境。
但是,对于像电子邮件地址这样可能在关系中使用或需要唯一的值,您需要格外小心,正如我们通过艰难的方式发现的那样,当您更改所有电子邮件以正确example@example.com测试与之相关的任何内容时信息几乎变得不可能。
对于这样的事情,我建议从真实的电子邮件中派生出一封虚拟电子邮件,例如:
UPDATE users
SET email = CONCAT(
SUBSTRING(MD5(email),1,16),
'@',
SUBSTRING(MD5(email),17,16),
'.com'
);
结果:
foo@bar.com -> f3ada405ce890b6f@8204094deb12d8a8.com
bar@foo.com -> dc8a42aba3651b0b@1f088ef928ff3b1d.com
然而,随着数据库的增长,像这样的克隆变得越来越成为一个问题,特别是对于本地开发,因为数据库的大小可能只会随着时间的推移而增长。目前,我们的产品数据库已接近 300GB,而我们的一些开发人员的机器除了满足所有其他要求外,还无法容纳副本。另外,克隆和清理需要几个小时,而且现在每个人都处于远程状态,通过已经受限的链接将这些克隆提供给开发人员会带来额外的后勤问题。
最好的解决方案,特别是对于本地开发人员来说,是仅转储数据库的架构,并用一组有代表性的模拟数据填充它以进行测试。对于全面的测试,我们在 CI/CD 管道环境中维护数据库的完整副本、清理版本。
- 2 回答
- 0 关注
- 108 浏览
添加回答
举报