MySQLのibdata1ファイルを縮小・パージする方法
MySQLを運用していると、システムテーブルスペースである「ibdata1」ファイルが際限なく肥大化し、ディスク容量を圧迫するという問題に直面することがあります。残念ながら、ibdata1ファイルは一度大きくなるとそのままでは縮小できません。これはMySQLの特に厄介な仕様の一つとして知られています。
ibdata1ファイルが縮小できない理由
ibdata1には、InnoDBのデータディクショナリ、Undoログ、変更バッファなどの重要な情報が格納されています。MySQLはこのファイルに対してデータ領域を再利用するものの、OSへディスク領域を返却することはないため、削除されたレコードがあってもファイルサイズは減少しません。
ibdata1を縮小する唯一の方法
ibdata1を実際に縮小するには、すべてのデータベースをダンプ(エクスポート)し、関連ファイルを削除した上で、mysqldumpからデータを再読み込みするという手順が必要です。具体的には以下の流れになります。
- mysqldumpコマンドで全データベースをバックアップします。
- MySQLサービスを停止します。
- ibdata1、およびib_logfile0、ib_logfile1などのInnoDBログファイルを削除します。
- MySQLサービスを起動し、ダンプファイルからデータを復元します。
作業前に必ず完全なバックアップを取得し、本番環境では計画的なメンテナンス時間内に実施してください。
innodb_file_per_tableで将来の肥大化を防ぐ
今後同じ問題を回避するために、各テーブルとそのインデックスを個別のファイルとして保存する設定を有効にしておきましょう。これにより、テーブルごとに独立した.ibdファイルが作成され、テーブル単位での最適化や削除が可能になります。
なお、この機能はMySQL 5.6.6以降ではデフォルトで有効になっています。それより前のバージョンを使用している場合は、my.cnf(my.ini)ファイルに以下の設定を追加する必要があります。
[mysqld] innodb_file_per_table = 1

設定を追加したらMySQLを再起動し、新しく作成されるテーブルから個別ファイル方式が適用されます。既存のテーブルを個別ファイルに移行したい場合は、ALTER TABLE ... ENGINE=InnoDBを実行してテーブルを再構築する必要があります。
まとめ
- ibdata1は縮小不可。縮小するには全データベースのダンプ→ファイル削除→再読み込みが必要。
- innodb_file_per_tableを有効にすれば、テーブルごとの独立ファイル管理で肥大化を防止できる。
- MySQL 5.6.6以降はデフォルト有効、それ以前はmy.cnfへの追記が必要。
-
Windows 10でChromeのコンポーネント(chrome://components)を更新する方法
Chromeコンポーネントの概要 Google Chromeは、アップデートが配信されればアプリ本体を簡単に更新できます。しかし、Chromeを最新バージョンにアップデートしても、内部の各コンポーネント(chrome://components)が新しいChromeに合わせて自動的にダウンロードされないことがあります。 たとえば、Widevine Content Decryption Module(WidevineCDM)が古いままだと、NetflixなどのDRM保護された動画サービスでエラーが発生し、コンテンツが視聴できなくなることがあります。このような場合は、該当するコンポーネントを個別に更
-
MySQLのクエリ結果をテキストファイル(.txt)やExcelで使える形式に保存する方法
MySQLでクエリの出力結果をテキストファイルに保存したい場合は、INTO OUTFILEコマンドを使用します。この記事では、実際にテーブルを作成し、データを登録したうえで、クエリ結果を「QueryOutput.txt」というファイルに出力するまでの一連の手順を具体的な例とともに解説します。 1. サンプルテーブルの作成 まず、出力確認用のテーブルを作成しましょう。 mysql> create table SaveintoTextFile -> ( -> id int, -> name varchar(100) -> ); Query