この節では、InnoDB
テーブル領域がスペースを使いきってしまったり、ログファイルのサイズを変更したいときに何ができるか説明しています。
InnoDB
テーブル領域のサイズを増やす一番簡単な方法は、最初からこれを自動拡大として設定することです。テーブル領域定義内の最後のデータファイルの
autoextend
属性を指定してください。すると
InnoDB
は領域を使い切ってしまったとき、そのファイルのサイズを自動的に
8M
バイト増やします。インクリメントサイズは、M
バイトで計られる
innodb_autoextend_increment
システム変数の値を設定することで変更できます。
または、別のデータファイルを追加することでテーブル領域のサイズを増やすことができます。これを行うためには、MySQL
サーバーを閉じ、innodb_data_file_path
の最後に新しいデータファイルを追加するためにテーブル領域設定を変更し、そしてサーバーを再起動してください。
もし最後のデータファイルがキーワード
autoextend
で定義されていたら、テーブル領域の再設定の手順は、最後のデータファイルがどのサイズまで成長するかを考慮する必要があります。データファイルのサイズを求め、それを
1024 × 1024 バイト (= 1M バイト)
の倍数の最近値まで丸め、そして丸めたサイズを
innodb_data_file_path
内で明示的に指定してください。すると別のデータファイルを追加することができます。innodb_data_file_path
内の最後のデータファイルだけが自動拡大として指定できるということを覚えて置いてください。
ひとつの例として、テーブル領域が 1
つだけ自動拡大データファイル
ibdata1
を持っていると仮定してください:
innodb_data_home_dir = innodb_data_file_path = /ibdata/ibdata1:10M:autoextend
このデータファイルが、時間をかけて 988M バイトまで成長したと仮定してください。ここに、元のデータファイルを非自動拡大に変更し、別の自動拡大データファイルを追加したあとの設定行があります:
innodb_data_home_dir = innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend
テーブル領域設定に新しいファイルを追加するときには、それが存在していないことを確認してください。InnoDB
はサーバーを再起動するときにファイルを作成し、初期化します。
現在、データファイルをテーブル領域から削除することはできません。テーブル領域のサイズを小さくするには、この手順を利用してください:
すべての InnoDB
テーブルをダンプするために
mysqldump
を利用してください。
サーバーを停止させます。
ibdata
や
ib_log
ファイルを含む、既存のすべてのテーブル領域ファイルを削除します。情報のバックアップコピーを残しておきたい場合は、MySQL
インストール内のファイルを削除する前にすべての
ib*
ファイルを別の場所にコピーします。
InnoDB
テーブルのすべての
.frm
ファイルを削除します。
新しいテーブル領域を設定してください。
サーバーを再起動します。
ダンプファイルをインポートしてください。
InnoDB
ログファイルの数やサイズを変更したければ、次の指示に従ってください。利用する手順は
innodb_fast_shutdown
の値によって決まります:
innodb_fast_shutdown
が 2 に設定されていない場合: MySQL
サーバーを停止し、エラーなしでシャットダウンしたことを確認します。古いログファイルを安全な場所にコピーし、シャットダウンで問題が発生してテーブル領域を復旧するためにそれらのファイルが必要になった場合に備えます。古いログファイルをログファイルディレクトリから削除し、ログファイル設定を変更するために
my.cnf
を編集し、MySQL
サーバーを再起動してください。mysqld
は起動時に
InnoDB
のログファイルが存在しないことを検出し、新しいログファイルを作成します。
innodb_fast_shutdown
が 2 に設定されている場合: 次のように
innodb_fast_shutdown
を 1 に設定します。
mysql> SET GLOBAL innodb_fast_shutdown = 1;
続いて、1 つ前の項目の手順に従います。