私は、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
実際にファイルを削除する必要があります。
- およびデータベースを除く
mysqldump
すべてのデータベース、プロシージャ、トリガーなどのを実行します。mysql
performance_schema
- 上記の2つのデータベース(
mysql
およびperformance_schema
)を除くすべてのデータベースを削除します。 - MySQLを停止する
- 削除
ibdata1
とib_log
ファイル - MySQLを起動する
- ダンプから復元
手順 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。