MySQLデータベースを使用して、複数のサーバーからのログを保存しています。データベースの平均増加量は1日あたり50 GBです。現在、その合計サイズは1.7 TBです。
ID
列とdatetime
列があります。
1週間より古いデータを同じサーバー上の別のデータベースに移動したい。
これに必要な手順は何ですか?
今のところ私はこれをします:
Insert into ArchiveDB.table select * from old_tbl where datetime <= Archivedate
DELETE FROM old_tbl WHERE datetime <= Archivedate
これを次の条件で実装したい:
...または、ベストプラクティスをご存知の場合はお知らせください。
InnoDBとPARTITIONs
を使用すると、毎日PARTITION BY RANGE(TO_DAY(...))
を設定し、「トランスポータブルテーブルスペース」を使用して1日とテーブルの関連付けを解除し、個別に移動できます。これは、INSERT...SELECT
およびDELETE
を実行するために必要なクエリよりもはるかに高速です。デタッチされると、パーティション(現在は独自のテーブル)を別のデータベースまたはサーバーに移動でき、データの取り込みに影響を与えることはありません。
1つの欠点:InnoDBのディスクフットプリントは、アーカイブよりもはるかに大きいです。
どのような種類のクエリをログに適用しますか?
ブログ: partitioning および chunking longy deletes
Perconaのpt-archiver (行をMySQLテーブルから別のテーブルまたはファイルにアーカイブするために使用)と Perconaのpt-online-schema-change (ニュートラルALTER
を使用して「オンライン」で実行すると、innodb_file_per_table=ON
)。