在 MySQL 中存档旧数据的最佳实践

The*_*Guy 9 mysql innodb database-design

我正在使用 MySQL 数据库来存储来自多个服务器的日志。数据库平均每天增长 50 GB。它的总大小现在是 1.7 TB。

它有IDdatetime列。

我想将超过一周的数据移动到同一台服务器上的另一个数据库。

这需要哪些步骤?

截至目前,我这样做:

  1. 创建存档数据库和表。
  2. Insert into ArchiveDB.table select * from old_tbl where datetime <= Archivedate
  3. 然后 DELETE FROM old_tbl WHERE datetime <= Archivedate

我想在以下条件下实现这一点:

  • 批量插入和删除。
  • 从旧数据库中删除后回收空间。
  • 无需停机即可更新统计信息。

...或者如果您知道任何最佳实践,请告诉我。

Ric*_*mes 9

使用 InnoDB 和PARTITIONs,您可以设置每天PARTITION BY RANGE(TO_DAY(...))并使用“可传输表空间”将一天与表分离并单独移动它。这将比执行INSERT...SELECTand所需的查询快得多DELETE。分离后,分区(现在本身就是一个表)可以移动到另一个数据库或服务器,而不会影响更多数据的摄取。

一个缺点:InnoDB 的磁盘占用空间比 Archive 多得多。

您对日志应用了哪些类型的查询?

博客: 分区分块冗长的删除