我有一个生产数据库,上面进行了主从复制。生产数据库备份是在从属服务器上完成的。
我希望让任意数量的开发环境成为从服务器的副本。问题是,从服务器没有任何写入操作,而开发服务器可能没有任何写入操作。例如,即使只是通过 Web 界面登录到开发站点,也可能触发对 loginLog 表或类似表的 INSERT,这可能导致从服务器复制停止并出现如下错误:
无法在表 dbname.tablename 上执行 Write_rows 事件;键 'PRIMARY' 的重复条目 '15610534',Error_code:1062;处理程序错误 HA_ERR_FOUND_DUPP_KEY;事件的主日志 bin-log.000829,end_log_pos 8209872
我的问题是......是否可以设置一个从属数据库,以便在发现冲突时主数据库的数据覆盖从属数据库的数据?
这样做的好处是,开发人员可以在开发环境中访问实时数据。例如,如果开发人员正在开发某种实时销售报告(例如“排行榜”),那么这些实时数据可能会很有用。
答案1
不,您无法通过 mysql 复制消除此类问题。
但为什么在制定报告时会出现关键违规错误呢?
最大的问题是,生产数据的开发副本到底需要更新到什么程度?我们谈论的又是多少数据?
您可以在单个主服务器上运行大量从服务器。但也许正确的解决方案是运行一个额外的从服务器作为生产数据的主卷副本,然后将其脱机一夜,以创建文件系统级副本,然后将其安装在新实例上。这在存储区域网络中很容易做到。但也可以在同一台主机上运行副本,或者在本地磁盘和 DRBD 的镜像上运行主卷副本从服务器,然后将远程 DRBD 重新映射到 RAID 镜像以使卫星副本同步。
或者,如果它是一个小型数据库,只需使用 rsync。
这确实意味着您将丢失快照之间创建的所有测试数据。