このセクションでは、InnoDB の Redo ログファイルの数またはサイズを変更する方法、および InnoDB のシステムテーブルスペースのサイズを増加または減少する方法について説明します。
InnoDB ログファイルの数またはサイズの変更
MySQL 5.6.7 以前で InnoDB の Redo ログファイルの数またはサイズを変更するには、次の手順を実行します。
-
innodb_fast_shutdownが 2 に設定されている場合は、innodb_fast_shutdownを 1 に設定します。mysql>
SET GLOBAL innodb_fast_shutdown = 1; innodb_fast_shutdownが 2 に設定されていないことを確認したあとに、MySQL サーバーを停止し、エラーなしでシャットダウンされること (ログ内に未処理のトランザクションに関する情報が存在しないこと) を確認します。シャットダウン中に何か問題が発生して、テーブルスペースをリカバリするために古いログファイルが必要となる場合に備えて、それらのログファイルを安全な場所にコピーします。
ログファイルディレクトリから古いログファイルを削除します。
my.cnfを編集して、ログファイルの構成を変更します。MySQL を再起動します。mysqld によって、起動時に
InnoDBログファイルが存在しないことが表示され、新しいログファイルが作成されます。
MySQL 5.6.8 の時点では、InnoDB ログファイルの数またはサイズを変更する際に、innodb_fast_shutdown 設定が関連しなくなりました。さらに、古いログファイルを削除する必要もなくなりました。ただし、バックアップとして古いログファイルを安全な場所にコピーすることはあります。InnoDB のログファイルの数またはサイズを変更するには、次の手順を実行します。
MySQL サーバーを停止し、エラーなしでシャットダウンされることを確認します。
my.cnfを編集して、ログファイルの構成を変更します。ログファイルのサイズを変更するには、innodb_log_file_sizeを構成します。ログファイルの数を多くするには、innodb_log_files_in_groupを構成します。MySQL サーバーを再起動します。
InnoDB で innodb_log_file_size が Redo ログファイルのサイズと異なることが検出された場合は、ログチェックポイントが書き込まれ、古いログファイルが閉じられてから削除され、リクエストされたサイズで新しいファイルが作成され、その新しいログファイルが開かれます。
InnoDB テーブルスペースのサイズの増加
InnoDB システムテーブルスペースのサイズを大きくするもっとも簡単な方法は、最初から自動拡張として構成することです。テーブルスペース定義内の最後のデータファイルに autoextend 属性を指定します。これにより、InnoDB が領域を使い果たすと、そのファイルのサイズが自動的に 8M バイトずつ増加します。innodb_autoextend_increment システム変数の値を設定すると、増分のサイズを変更できます。このサイズは、M バイト単位で測定されます。
別のデータファイルを追加すると、システムテーブルスペースを定義された量だけ拡大できます。
MySQL サーバーをシャットダウンします。
以前の最後のデータファイルが
autoextendというキーワードを使用して定義されている場合は、実際に増加した大きさに基づいて、固定サイズが使用されるようにその定義を変更します。データファイルのサイズをチェックし、それを 1024 × 1024 バイト (= 1M バイト) にもっとも近い倍数に丸め、この丸められたサイズをinnodb_data_file_pathに明示的に指定します。新しいデータファイルを
innodb_data_file_pathの末尾に追加します。これにより、オプションでそのファイルが自動拡張になります。innodb_data_file_pathで自動拡張として指定できるのは、最後のデータファイルのみです。MySQL サーバーを再起動します。
たとえば、このテーブルスペースには、ibdata1 という 1 つの自動拡張データファイルしか存在しません。
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 を使用して、MySQL データベース内に配置されている
InnoDBテーブルを含む、すべてのInnoDBテーブルをダンプします。5.6 の時点では、MySQL データベース内に 5 つのInnoDBテーブルが含まれています。mysql> select table_name from information_schema.tables where table_schema='mysql' and engine='InnoDB'; +----------------------+ | table_name | +----------------------+ | innodb_index_stats | | innodb_table_stats | | slave_master_info | | slave_relay_log_info | | slave_worker_info | +----------------------+ 5 rows in set (0.00 sec) サーバーを停止します。
ibdataおよびib_logファイルを含む、すべての既存のテーブルスペースファイル (*.ibd) を削除します。MySQL データベース内に配置されているテーブルの*.ibdファイルも忘れずに削除してください。InnoDBテーブルのすべての.frmファイルを削除します。新しいテーブルスペースを構成します。
サーバーを再起動します。
ダンプファイルをインポートします。
データベースで InnoDB エンジンのみが使用されている場合は、すべてのデータベースをダンプし、サーバーを停止し、すべてのデータベースおよび InnoDB のログファイルを削除し、サーバーを再起動し、ダンプファイルをインポートした方が簡単な可能性があります。