web-dev-qa-db-ja.com

/ var / lib / mysqlディレクトリにあるibdata1ファイルとは何ですか?

Webminのコントロールパネルにログインすると、実質的にすべてのディスク領域がいっぱいになっていることに気付きました。システムで最大の10個のファイル/ディレクトリを検索したところ、ibdata1と呼ばれるファイルが約94GBのスペースを占めていることがわかりました。それは/ var/lib/mysqlディレクトリにあります。

Ibdata1は何をしますか?削除しても大丈夫ですか?私の仮定では、それはある種のダンプであると考えられていますが、それは単なる乱暴な推測です。

34
James

ファイル_ibdata1_は、InnoDBインフラストラクチャのシステムテーブルスペースです。

InnoDBに不可欠な情報のクラスがいくつか含まれています

  • テーブルデータページ
  • テーブルインデックスページ
  • データ辞書
  • MVCC制御データ
    • スペースを元に戻す
    • ロールバックセグメント
  • 二重書き込みバッファ(OSキャッシュを回避するためにバックグラウンドで書き込まれたページ)
  • バッファの挿入(セカンダリインデックスの変更)

InnoDBユニバース(右側)のibdata1の場所に注意してください

InnoDB Architecture

innodb_file_per_table を有効にすることで、データページとインデックスページを_ibdata1_から分離できます。これにより、新しく作成されたInnoDBテーブルは、データとインデックスページを外部_.ibd_ファイルに格納します。

  • datadir は/ var/lib/mysqlです
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;、_/var/lib/mysql/mydb/mytable.frm_ を作成します
    • innodb_file_per_tableが有効で、データ/インデックスページが_/var/lib/mysql/mydb/mytable.ibd_に保存されている
    • innodb_file_per_tableが無効になり、データ/インデックスページがibdata1に保存される

InnoDBテーブルがどこに保存されていても、InnoDBの機能にはテーブルメタデータの検索と保存および取得が必要です [〜#〜] mvcc [〜#〜] サポートする情報 ACIDコンプライアンス および Transaction Isolation

これは、ibdata1からのテーブルデータとインデックスの分離に関する過去の記事です。

次はどうする

Ibdata1にすべてを保存しておくことはできますが、LVMスナップショットを作成するのは本当に大変なことです(私の個人的な意見)。

My StackOverflow投稿を使用して、そのファイルを完全に縮小する必要があります。

このクエリを実行してください:

_SELECT 
    ((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;
_

これにより、InnoDBクリーンアップを適用した後、どれだけの無駄なスペースを回収できるかがわかります。

39
RolandoMySQLDBA

そのファイルはibdata1ibdatalではなく、すべてのInnoDBデータベースが含まれています。削除すると、すべてのデータが失われます。

それを処理する方法に関するいくつかのアイデアについては、 MySQLでibdata1ファイルを縮小/パージする方法 を参照してください。

8
Michael Hampton

MySQLエンジンとしてinnodbをデフォルトで使用する場合、データベースはibdata1にallを格納します。また、ログファイルib_logfile0およびib_logfile1もあります。これらのファイルは削除しないでください。

2
silviud