我有一个项目要求我们在多台计算机上维护多个MySQL数据库。它们将具有相同的模式。
每个数据库必须定期将其内容发送到主服务器,主服务器将聚合所有传入数据。内容应该转储到一个文件,该文件可以通过闪存驱动器传送到支持互联网的计算机发送。
键将命名空间,因此不应该有任何冲突,但我不完全确定设计它的优雅方式。我正在考虑为每一行加上时间戳并在每个表上运行查询"SELECT * FROM [table] WHERE timestamp > last_backup_time"
,然后将其转储到文件中并在主服务器上批量加载它。
分布式计算机无法访问互联网。我们在第三世界国家的农村地区。
有什么建议吗?
答案 0 :(得分:1)
您
SELECT * FROM [table] WHERE timestamp > last_backup_time
将错过DELETEed行。
您可能想要做的是通过USB记忆棒使用MySQL复制。也就是说,在源服务器上启用binlog并确保不会自动丢弃binlog。将binlog文件复制到USB记忆棒,然后PURGE MASTER LOGS TO ...在源服务器上擦除它们。
在聚合服务器上,使用mysqlbinlog命令将binlog转换为可执行脚本,然后将该数据作为SQL脚本导入。
聚合服务器必须具有每个源服务器数据库的副本,但只要您的SQL全部使用非限定表名称(不会使用schema.table语法来引用表),就可以具有不同模式名称的副本。导入mysqlbinlog生成的脚本(使用正确的USE命令前缀)将镜像聚合服务器上的源服务器更改。
然后可以使用完全限定的表名完成所有数据库的聚合(即在JOIN或INSERT ... SELECT语句中使用schema.table语法)。