我有一个主要的体系结构与MySql数据库,复制和备份,它工作正常。 现在我也有一个开发服务器,我在那里玩代码,我想使用主数据库的数据来玩,读取和写入。 我如何设置复制,让一些真正的数据从主数据库到开发数据库? 我应该永久复制还是每天只复制一次,以便在dev dbtesting期间保持某种一致性? 任何想法/策略是受欢迎的。
编辑:好吧,以澄清我使用的应用程序的types是与Django的Web应用程序开发。 这个想法是testing开发服务器上的一些新function。 写入需求很重要,只读数据库不足以彻底运行testing。 目前,数据库需要花费相当多的时间来转储到另一台服务器上(比如10分钟),但是这个数字还在增长。
“正确的答案”是高度依赖于应用程序,但这是我见过的一些策略。
每日备份/按需恢复
如果你有一个小的数据集,并且需要能够让不同的开发者临时使用这个备份的话,这个效果会很好。 这个想法基本上是复制目标系统上的一个mysqldump ,以及一些执行MySQL导入的脚本。
ETL过程
如果您需要数据的一个子集,或者您想以某种方式将其屏蔽以防止数据泄露,则此方法非常有用。 您可以在ETL脚本中转换敏感数据,并将其直接加载到开发数据库中,或者像上述方法一样创build转储,但您会知道已经清除了该数据。
如果要每小时运行一次ETL过程,比如从生产中提取最后一个小时,进行一些清理/重组,并将其导入到开发“主数据库”以导出到开发系统等,ETL过程可能会更好。
二进制日志复制
这种方法可能不适合你,因为你特别想读取和写入开发数据库。 有时人们会使用复制来运行只读回归testing,但修改数据库将导致复制失败和/或数据不一致。
这取决于您正在开发的应用程序:除非您需要testing应用程序如何处理来自生产服务器的新数据,否则简单的转储或每日/每周复制就可以解决问题,在这种情况下,您将需要永久复制。
全部取决于你想复制多less数据。 如果它相当小的分贝,你可以每天转储,然后在开发数据库服务器上重新创build数据库。 你可以读写。 复制的情况下,你想写在奴隶是相当棘手(即时消息不知道,但也许是不可能的)。 你不能写主从模式的从站,在主 – 主模式下,任何写操作都会被复制到其他主站
如果你需要读/写权限,我build议你设置一个cron作业,将数据库从你的作品复制到你的开发中去。
优点:你有写权限
缺点:下次你运行你的cron工作来刷新你的dbs时,你所有的工作都将被清除
如果您只需要只读访问权限,我build议您使用以下指南来设置复制:MySQL :: MySQL 5.0参考手册:: 16复制
亲:总是最新的
缺点:不能写,因为这会在某个时候破坏复制。