我有一个包含 MySql db、复制和备份的主架构,运行良好。现在我还有一个开发服务器,我可以在服务器上运行代码,并且我也想使用主数据库中的数据进行读写操作。我该如何设置复制,以便将一些真实数据从主数据库传输到开发数据库?我应该永久复制还是每天只复制一次,以便在开发数据库测试期间保持某种一致性?欢迎提出任何想法/策略。
编辑:好的,澄清一下,我使用的应用程序类型是使用 Django 开发的 Web 应用程序。我的想法是在开发服务器上测试一些新功能。写入的需求很重要,只读数据库不足以彻底运行测试。目前,数据库需要相当合理的时间才能转储到另一台服务器(大约 10 分钟),但它正在增长。
答案1
“正确答案”是高度依赖于应用程序,但这里有一些我以前见过的策略。
每日备份/按需恢复
如果您的数据集很小,并且需要能够让各个开发人员临时使用备份,那么这种方法非常有效。这个想法基本上是mysqldump
在复制目标系统上和一些脚本上进行 MySQL 导入。
ETL 流程
如果您需要数据子集,或者希望以某种方式屏蔽数据以防止泄露,这种方法非常有意义。您可以在 ETL 脚本中转换敏感数据,然后直接加载到开发数据库中,或者像上述方法一样创建转储,但您会知道它已被清理。
如果您希望每小时运行一次 ETL 流程,比如从生产中提取最后一小时的数据,进行一些清理/重组,然后将其导入到开发“主”数据库中以便导出到开发系统等,那么 ETL 流程会很有用。
二进制日志复制
这种方法可能不适合你,因为你特别想阅读和写入开发数据库。有时人们会使用复制来运行只读回归测试,但修改数据库将导致复制失败和/或数据不一致。
答案2
这取决于您正在开发的应用程序:简单的转储或每日/每周复制就可以解决问题,除非您需要测试应用程序如何处理来自生产服务器的新数据,在这种情况下,您将需要永久复制。
答案3
一切都取决于您想要复制多少数据。如果数据库很小,您可以每天转储,然后在开发数据库服务器上重新创建数据库。您可以进行读写操作。在您想要在从服务器上进行写入的情况下进行复制将非常棘手(我不确定,但可能是不可能的)。您无法在主从模式下在从服务器上进行写入,而在主主模式下,任何写入都将复制到其他主服务器上
答案4
如果您需要读/写访问权限,我建议您设置一个 cron 作业,将数据库从生产复制到开发。
优点:你获得写权限
缺点:下次运行 cron 任务刷新数据库时,所有工作都将被清除
如果你只需要只读访问权限,我建议你使用以下命令设置复制指南:MySQL :: MySQL 5.0 参考手册:: 16 复制
优点:始终保持最新状态
缺点:无法写入,因为这会在某个时候破坏复制。