2011-04-15 71 views
0

我在同一个Linux机器上有2个MySQL数据库。它们不是超大的,但有些桌子可容纳500,000行,每月增加大约40,000行。增量MySQL

我需要做的是从一个数据库向另一个数据库每天写一次部分备份。这部分备份是一个快照,除了备份之外,不会有任何新的数据写入它。它仅包含主分区的一些表格,并且仅包含一些字段的表格。

编写一个删除备份数据库的PHP脚本,然后用所需的数据重新创建一个新的快照很容易,但是我想知道是否有一种方法可以用PHP逐步完成此操作写入新的或更改的数据。

+3

您在** ** **机器上从一个数据库备份到另一个数据库?什么是备份? – halfdan 2011-04-15 12:51:48

回答

1

你的数据库中是否有时间戳字段?使用ON UPDATE CURRENT_TIMESTAMP子句的时间戳可以让您知道每行的修改时间。这样,您可以轻松地对行WHERE时间戳大于给定值的SELECT查询。

+0

是的..好想法,谢谢你 – user606336 2011-04-15 14:13:43

1

如果您正在检查多条记录上的新数据或更改数据,则该数据在机器上会很大。每条记录必须与另一个数据库中的记录进行比较。将会非常缓慢而巨大的性能影响。

最好的办法是使用专为此任务设计的备份软件。如果你真的想要一个PHP解决方案,我会向数据库添加一个名为changes的新表。它将保存表名和密钥索引。

然后在需要备份的每个表上添加一个触发器,该备份将使用表名和密钥在更改表中输入新条目。然后你的PHP脚本可以查询这个表来查找更改和新项目,只查询这些。

而不是使用一个单独的表,您可以添加一个微小的int列到名为lastAction的现有表或其他东西,并存储0为无变化,1为更新和2为新记录。

然后,您可以只查询所需的数据。

请记住,具有两个数据库的PHP解决方案永远不可靠。您需要如下的结构:

1 Query record from old database 
2 Update/insert record in new database 
3 Mark old database record as completed. 

这很可能是您第2步完成后,你失去连接到旧数据库,不能再设置它来完成。这将导致记录在下次运行中被更新或添加。

另一个问题可能是第1步和第2步之间有人再次改变记录。然后,在备份中插入较旧的值并将其标记为已完成。而最新的更新将不再备份。