存档实时MySQL数据库的最佳方法
时间:2020-03-05 18:54:06 来源:igfitidea点击:
我们有一个实时的MySQL数据库,该数据库的INSERT率为99%,大约每秒100个。我们希望每天存档数据,以便我们可以在不影响主实时数据库的情况下对其进行查询。此外,归档完成后,我们要清除实时数据库。
没有(如果可能)锁定INSERT的最佳方法是什么?我们对查询使用INSERT DELAYED。
解决方案
回答
我们能否保留两个镜像数据库?写一个,将第二个作为存档。例如,每24小时切换一次(或者我们认为合适的时长)。在作为存档的数据库中,插入今天的所有活动。然后,两个数据库应该匹配。将此用作新的实时数据库。获取存档的数据库,然后对它进行任何操作。现在我们可以备份/提取/读取我们想要的所有内容,因为它们没有被积极地写入。
这有点像镜像袭击,我们可以将一个驱动器脱机进行备份,重新同步,然后将另一个驱动器取出进行备份。
回答
http://www.maatkit.org/具有mk-archiver
archives or purges rows from a table to another table and/or a file. It is designed to efficiently “nibble” data in very small chunks without interfering with critical online transaction processing (OLTP) queries. It accomplishes this with a non-backtracking query plan that keeps its place in the table from query to query, so each subsequent query does very little work to find more archivable rows.
另一种选择是每天简单地创建一个新的数据库表。 MyIsam确实具有一些优势,因为到表末尾的INSERT通常不会阻塞,并且存在合并表类型,可以将它们全部放在一起。许多网站都将httpd流量记录到这样的表中。
使用Mysql 5.1,还有分区表可以做很多相同的事情。
回答
MySQL复制将为此完美地工作。
主机->实时服务器。
从站->同一网络上的其他服务器。
回答
听起来复制是解决此问题的最佳方法。初始同步后,从站通过二进制日志获取更新,因此完全不影响主数据库。
有关复制的更多信息。
回答
我使用mysql分区表,并且在各个方面都取得了不错的效果。
回答
MK-ARCHIVER是一种用于归档MYSQL数据的优雅工具。
http://www.maatkit.org/doc/mk-archiver.html