我为实时 mySQL 数据库同步开发了一种自定义机制,与内置的 mySQL 主/从复制相比,它随着时间的推移提供更高的可靠性(数据完整性) 。
同步机制以周期性循环运行,每 5 秒触发一次,由以下阶段组成:
- 主数据库被命令通过
mysqldump
- 转储文件被传输到远程服务器,拥有从数据库。此传输利用了
rsync
delta 算法和数据压缩 - 远程服务器等待接收确认以继续
- 远程服务器将接收到的转储文件导入从属mySQL数据库
- 远程服务器确认本地服务器同步周期已完成
为了防止主从之间的任何不一致,转储文件将删除整个从数据库调用mysqldump
。--add-drop-database
由于从机在不中断 mySQL 守护进程的情况下导入转储文件,我担心如果在 mySQLdrop database
从转储文件读取指令之后的时间窗口内,以及在 mySQL 完成所有表的重新创建之前,mySQL 客户端试图访问尚未重新创建的表的数据库可能会导致他的请求失败。
可能会发生这种情况,或者在游戏过程中,任何试图访问数据库的最终客户端都被安静地暂停,直到它的请求可以被执行?最终,可以应用哪些解决方案?