我有一个生产数据库与主从复制正在完成。 生产数据库备份完成从属服务器。
我想这样做,以便任意数量的开发环境可以是副本的副本。 问题是,虽然从服务器没有写任何东西,开发服务器可能会。 就像只是通过web界面login到dev站点一样,可能会触发一个INSERT到一个loginLog表或其他类似的东西,这可能会导致从复制停止,像这样的错误:
无法在表dbname.tablename上执行Write_rows事件; 重复项“15610534”的关键“主”,Error_code:1062; 处理程序错误HA_ERR_FOUND_DUPP_KEY; 事件的主日志bin-log.000829,end_log_pos 8209872
我的问题是…是否有可能build立一个从属数据库,当发现冲突时,主数据库的数据覆盖从属数据库的数据?
这样做的好处将意味着开发人员可以在开发环境中访问实时数据。 就像一个开发人员正在开发一些关于销售的实时报告(例如“排行榜”),这个实时数据可能是有用的。
不,你不能用mysql复制来消除这些问题。
但为什么在编写报告时会出现重大违规错误?
最大的问题是您的生产数据的开发副本需要如何保持最新? 我们在谈论多less数据?
您可以从一个主站运行大量的从站。 但是,也许正确的解决scheme是运行一个额外的从服务器作为生产数据的主要卷副本,然后在一夜之间离线创build文件系统级副本,然后将这些副本装载到新实例中。 这对于存储区域networking很容易。 但是也可以在同一主机上运行副本,或者在本地磁盘和DRBD的镜像之上运行主卷副本,然后将远程DRBD重新映射到RAID镜像以使卫星副本同步。
或者,如果它是一个小型数据库,只需使用rsync即可。
这确实意味着你将失去在快照之间创build的任何testing数据。