我在同一个Linux机器上有2个MySQL数据库。它们不是超大,但有些表格大约有500,000行,每月增加约40,000行。
我需要做的是每天从一个数据库写一个部分备份到另一个数据库。此部分备份是一个快照,除备份外,不会向其写入任何新数据。它只包含主数据库的一些表,并且只包含一些字段。
编写一个删除备份数据库的PHP脚本很容易,然后使用所需的数据重新创建它以获取新的快照,但是我想知道是否有办法用PHP逐步执行此操作并且只写新的或变更的数据。
答案 0 :(得分:1)
您的数据库上是否有时间戳字段?使用带有ON UPDATE CURRENT_TIMESTAMP子句的时间戳可以让您知道每行的修改时间。这样,您可以轻松地对行WHERE时间戳大于给定值执行SELECT查询。
答案 1 :(得分: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步之间,有人再次改变记录。然后在备份中插入旧值并将其标记为已完成。虽然最新的更新将不再备份。