存档实时MySQL数据库的最佳方式

时间:2008-09-15 17:50:24

标签: mysql database

我们有一个实时MySQL数据库,99%INSERT,每秒100左右。我们希望每天存档数据,以便我们可以在其上运行查询,而不会影响主数据库。此外,存档完成后,我们要清除实时数据库。

如果没有(如果可能)锁定INSERT,最好的方法是什么?我们对查询使用INSERT DELAYED。

6 个答案:

答案 0 :(得分:14)

http://www.maatkit.org/有mk-archiver

  

将表中的行存档或清除到另一个表和/或文件。它旨在以非常小的块有效地“蚕食”数据,而不会干扰关键的在线事务处理(OLTP)查询。它通过一个非回溯查询计划来实现这一点,该计划在查询到查询的表格中保持其位置,因此每个后续查询都可以很少地找到更多可存档行。

另一种方法是每天简单地创建一个新的数据库表。 MyIsam确实有一些优点,因为INSERT到表的末尾通常不会阻塞,并且有一个合并表类型将它们全部重新组合在一起。许多网站将httpd流量记录到这样的表中。

使用Mysql 5.1,还有一些分区表也可以做同样的事情。

答案 1 :(得分:2)

听起来像复制是最好的解决方案。在初始同步之后,从设备通过Binary Log获得更新,因此根本不会影响主数据库。

More on replication.

答案 2 :(得分:2)

我使用mysql分区表,我在各方面都取得了很好的成绩。

答案 3 :(得分:1)

MySQL复制对此非常有用。
大师 - >实时服务器 奴隶 - >同一网络上的其他服务器。

答案 4 :(得分:1)

MK-ARCHIVER是一个存档MYSQL数据的优雅工具。

http://www.maatkit.org/doc/mk-archiver.html

答案 5 :(得分:0)

你能保留两个镜像数据库吗?写一个,保留第二个作为存档。每24小时切换一次(或者你认为合适的时间长)。进入作为存档的数据库,插入所有今天的活动。那么两个数据库应该匹配。将其用作新的实时数据库。获取存档的数据库并执行您想要的任何操作。您现在可以备份/提取/读取所有未被主动写入的内容。

有点像镜像raid,你可以将一个驱动器脱机备份,重新同步它,然后将另一个驱动器用于备份。