MySQLでibdata1ファイルを縮小/消去する方法 質問する

MySQLでibdata1ファイルを縮小/消去する方法 質問する

私は、R で統計を実行するための「クエリ ツール」として、ローカルホストの MySQL を使用しています。つまり、R スクリプトを実行するたびに、新しいデータベース (A) を作成し、新しいテーブル (B) を作成し、データを B にインポートし、必要なものを取得するためのクエリを送信してから、B を削除して A を削除します。

私の場合は問題なく動作していますが、ibdata ファイルのサイズが急速に増加していることに気づきました。MySQL には何も保存していませんが、ibdata1 ファイルはすでに 100 MB を超えています。

セットアップにはほぼデフォルトの MySQL 設定を使用していますが、一定期間後に ibdata1 ファイルを自動的に縮小/消去する方法はありますか?

ベストアンサー1

縮小されないのはibdata1、MySQL の特に厄介な機能です。ibdata1すべてのデータベースを削除し、ファイルを削除してダンプを再ロードしない限り、ファイルを実際に縮小することはできません。

しかし、MySQLを設定すれば、各テーブルとそのインデックスを別々のファイルとして保存することができます。そうすれば、ibdata1それほど大きくはなりません。ビル・カーウィンのコメントこれは、MySQL バージョン 5.6.6 以降ではデフォルトで有効になっています。

これを行ったのは少し前のことですが、テーブルごとに別々のファイルを使用するようにサーバーを設定するには、my.cnfこれを有効にするために変更する必要があります。

[mysqld]
innodb_file_per_table=1

https://dev.mysql.com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html

スペースを再利用したい場合は、ibdata1実際にファイルを削除する必要があります。

  1. およびデータベースを除くmysqldumpすべてのデータベース、プロシージャ、トリガーなどのを実行します。mysqlperformance_schema
  2. 上記の2つのデータベースmysqlおよびperformance_schema)を除くすべてのデータベースを削除します。
  3. MySQLを停止する
  4. 削除ibdata1ib_logファイル
  5. MySQLを起動する
  6. ダンプから復元

手順 5 で MySQL を起動すると、ibdata1およびib_logファイルが再作成されます。

これで準備完了です。分析用に新しいデータベースを作成すると、テーブルはibd*ではなく別のファイルに配置されますibdata1。通常はすぐにデータベースを削除するので、ibd*ファイルも削除されます。

http://dev.mysql.com/doc/refman/5.1/en/drop-database.html

おそらくあなたはこれを見たことがあるでしょう:
参考文献

コマンドALTER TABLE <tablename> ENGINE=innodbまたはを使用するとOPTIMIZE TABLE <tablename>、ibdata1 からデータとインデックス ページを別々のファイルに抽出できます。ただし、上記の手順を実行しない限り、ibdata1 は縮小されません。

に関してはinformation_schema、削除する必要も削除不可能もありません。これは実際には読み取り専用ビューの集まりであり、テーブルではありません。また、これらに関連付けられたファイルはなく、データベースディレクトリさえありません。 はinformations_schemaメモリ db-engine を使用しており、mysqld の停止/再起動時に削除され、再生成されます。https://dev.mysql.com/doc/refman/5.7/en/information-schema.html

おすすめ記事