我们有一个高效的 MySQL 数据库,其中包含私有(private)用户数据(密码哈希、ips、电子邮件等)。 当开发人员在其开发人员虚拟机上的 jenkins 中运行构建作业时,我们希望包含实时数据库的副本,以便他获得一个与我们的生产环境非常相似的环境。但是我们必须在将生产数据库复制到开发服务器之前清理它,原因有两个:
- 开发者不应获得我们所有用户数据的副本,例如哈希密码或电子邮件
- 数据库很大,所以我们要删除一些内容,开发人员有一些真实的数据集用于测试,但不能> 100k,这没有任何好处,并且会增加转储所需的时间<
我考虑过这个问题并尝试了一些方法,但我发现没有快速且可以完成这项工作的方法。 我的第一个想法是通过 mysqldump 转储所有数据,将其导入到开发机器上,并发送一些 MySQL 查询来设置占位符而不是私有(private)数据
UPDATE user_data SET email = "dev@example.com" [...]
一方面,这很慢,因为它必须复制巨大的数据库并执行查询。我不喜欢我们所有的用户数据都在开发机器上,即使是很短的一段时间。我希望数据首先被清理然后导出到开发机器。这可以通过将数据库复制到生产系统上的临时数据库中,然后清理数据,将其导出并删除生产系统上复制的数据库来实现。但这也造成了大量的开销。
什么是执行此操作的好且快速的方法? 我考虑过使用 mysqldump 之类的方法来替换数据,这样就不会产生任何开销。但我找不到任何可以做到这一点的工具。
最佳答案
生产服务器上有足够的空间容纳两个数据库吗?如果是这样,请在同一服务器(或任何服务器,实际上)上创建一个开发人员数据库,这是生产的夜间转储,减去所有敏感信息和批量信息。
开发人员只能从生产服务器访问此“开发人员”数据库,您知道该数据库已删除任何敏感内容。作为奖励,他们可以直接连接到它,并且可能永远不需要下载它。
关于mysql - 将实时数据库复制到开发服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26726107/