web-dev-qa-db-ja.com

Innodb_file_per_tableを設定しても、Innodb ibdata1ファイルはどのようにして5倍に拡張できますか?

私はinnodb_file_per_tableを設定しており、800Mテーブルにいくつかの変更を加えて約600Mに減らしたところ、今日のibdata1ファイルが59Mから323Mにジャンプしました。その特定のテーブルの.ibdファイルは削減されましたが、サーバーのibdata1ファイルはおかしくなりました。何か案は?

6
Dan

これは意外なことかもしれませんが、ibdata1にはいくつかの可動部分があることをご存知ですか? innodb_file_per_table を有効にしても、ibdata1に格納されている情報のクラス

  • データ辞書
  • 二重書き込みバッファ(データの一貫性をサポート。クラッシュリカバリに使用)
  • バッファーの挿入(セカンダリの一意でないインデックスへの変更のバッファー)
  • ロールバックセグメント
  • スペースを元に戻す(最も制御されない成長が起こり得る場所)

InnoDBアーキテクチャの図解

InnoDB Architecture

Ibdata1を突然成長させるものは何ですか?

mysqlperformanceblog.comのReasons for run-away main Innodb Tablespace によると:

  • トランザクションの多くの変更
  • 非常に長いトランザクション
  • パージスレッドの遅延

InnoDBデータセットの合計が比較的小さく、ibdata1を縮小したい限り、次のことを実行できます。

ステップ01:ダウンタイムをスケジュールする

ステップ02:mysqldumpはすべてのデータベースを/root/MySQLData.sqlに保存します

mysqldump -uroot -p --all-databases --routines --triggers > /root/MySQLData.sql

ステップ03:SET GLOBAL innodb_fast_shutdown = 0;を実行します

ステップ04:mysqlおよびinformation_schemaデータベースを除くすべてのデータベースを削除します

ステップ05:service mysql stop

ステップ06:rm -f /var/lib/mysql/ib*

ステップ07:service mysql start(ibdata1、ib_logfile0、ib_logfile1を再作成します)

ステップ08:mysqlにログインする

ステップ09:mysqlプロンプトでmysql> source /root/MySQLData.sqlを実行します

それでおしまい。私はこれを何度も繰り返してきました: 方法:mysql InnoDBストレージエンジンをクリーンアップしますか?

ここからは、取引による奇妙な成長に耐えなければなりません。

試してみる !!!

3
RolandoMySQLDBA