端くれプログラマの備忘録 MySQL [MySQL] ストレージを解放するには?

[MySQL] ストレージを解放するには?

MySQLのInnoDBテーブルでストレージを物理的に解放する方法はいくつかあります。以下にいくつかの方法を紹介します。

1. OPTIMIZE TABLEコマンドを使う

  • OPTIMIZE TABLE table_name; を実行すると、テーブルのデータとインデックスを再構築し、未使用領域を解放することができます。
  • この操作はテーブルのデータのコピー、削除、インデックス再構築を行うため、大容量テーブルでは時間がかかることがあります。

2. テーブルのダンプと再インポート

  • データをダンプし、テーブルを削除してから再インポートすることで、ストレージを解放できます。
  1. 現在のデータをバックアップ: mysqldump -u username -p database_name table_name > dump_file.sql
  2. テーブルを削除: DROP TABLE table_name;
  3. ダンプファイルを再インポート: mysql -u username -p database_name < dump_file.sql
  • この方法はテーブルが大きい場合、処理に時間がかかるため注意が必要です。

3. パーティションの使用

  • テーブルが非常に大きい場合は、パーティションを活用することで、古いデータのパーティションをDROPしてストレージを解放できます。
  • 必要に応じてパーティション戦略を採用することで、管理とパフォーマンス向上にもつながる場合があります。

4. ファイル設定の変更(innodb_file_per_table)

  • MySQLの設定で innodb_file_per_table が有効になっている場合、各テーブルは独自のストレージファイルを持ちます。この設定が有効であれば、テーブルを削除することで、ストレージがOSに返されやすくなります。
  • デフォルトでは有効になっていますが、確認するには SHOW VARIABLES LIKE 'innodb_file_per_table'; を実行してください。有効でない場合は、設定ファイル(my.cnf/my.ini)で innodb_file_per_table=ON を設定し、MySQLを再起動します。

5. ALTER TABLEを使用してテーブルをリビルド

  • ALTER TABLE table_name ENGINE=InnoDB; を実行すると、テーブルを再構築し、ストレージを解放することができます。

注意点

  • 大量のデータを操作するときは、バックアップを取ることを強く推奨します。
  • 大容量のテーブル操作は長時間かかる場合があるため、パフォーマンスやダウンタイムの影響に注意し、適切なタイミングで作業を行ってください。
  • もし使用中のストレージ領域が即座に重要である場合、慎重に計画を立てて、操作を行うことが大切です。