[解決済み] MySQLでibdata1ファイルを縮小/パージする方法
質問
つまり、Rスクリプトを実行するたびに、新しいデータベース(A)を作成し、新しいテーブル(B)を作成し、Bにデータをインポートし、必要なものを得るためにクエリを送信し、その後Bを削除し、Aを削除しています。
MySQLには何も保存していないのに、ibdata1ファイルはすでに100MBを超えています。
MySQLのデフォルト設定をほぼそのまま使っているのですが、一定期間後にibdata1ファイルを自動的に縮小・消去する方法はありますか?
解決方法を教えてください。
その
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を停止する
-
削除
ibdata1
とib_log
ファイル - mysqlの起動
- ダンプからのリストア
手順5でMySQLを起動すると
ibdata1
と
ib_log
ファイルが再作成されます。
これで準備万端です。分析用の新しいデータベースを作成すると、テーブルが別々の
ibd*
ファイルではなく
ibdata1
. 通常、データベースをすぐに削除するため
ibd*
のファイルは削除されます。
http://dev.mysql.com/doc/refman/5.1/en/drop-database.html
ご覧になったことがある方も多いのではないでしょうか。
http://bugs.mysql.com/bug.php?id=1341
コマンドを使用することで
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
.
関連
-
MySQLデータベース・インデックスの左端一致の原則
-
MysqlからElasticsearchにデータを同期させる方法を説明します。
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
-
[解決済み] mysqlデータベースのサイズを取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mysqlでインデックスに障害が発生する原因は何ですか?
-
mysqlインデックスが長すぎる特殊なキーが長すぎる解決策
-
[解決済み】MySQL - オペランドは1つのカラムを含む必要があります。
-
Mysql がエラー 1241 を報告 オペランドは 1 つのカラムを含む必要があります。
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] Mysqlでidを使用してテーブルから多くの行を削除する
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み] ハウツー。mysql InnoDB ストレージエンジンのクリーンアップ?