【问题标题】:Best way to archive live MySQL database归档实时 MySQL 数据库的最佳方式
【发布时间】:2013-09-19 23:06:14
【问题描述】:

我们有一个实时 MySQL 数据库,它的插入率为 99%,大约每秒 100 次。我们希望每天归档数据,以便我们可以在不影响主实时数据库的情况下对其运行查询。另外,一旦归档完成,我们要清除实时数据库。

在没有(如果可能)锁定 INSERT 的情况下执行此操作的最佳方法是什么?我们对查询使用 INSERT DELAYED。

【问题讨论】:

    标签: mysql database


    【解决方案1】:

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

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

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

    在 Mysql 5.1 中,也有分区表可以做很多相同的事情。

    【讨论】:

    【解决方案2】:

    我使用mysql分区表,各方面都取得了不错的成绩。

    【讨论】:

      【解决方案3】:

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

      More on replication.

      【讨论】:

        【解决方案4】:

        MK-ARCHIVER 是一款优雅的 MYSQL 数据归档工具。

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

        【讨论】:

        • 链接不存在
        【解决方案5】:

        MySQL 复制可以完美地解决这个问题。
        主服务器 -> 实时服务器。
        从站 -> 同一网络上的不同服务器。

        【讨论】:

          【解决方案6】:

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

          这有点像镜像RAID,您可以将一个驱动器脱机进行备份,重新同步它,然后取出另一个驱动器进行备份。

          【讨论】:

            猜你喜欢
            • 2021-07-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-17
            相关资源
            最近更新 更多