Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  InnoDB ログファイルの数またはサイズの変更、および InnoDB テーブルスペースのサイズの変更

14.5.7 InnoDB ログファイルの数またはサイズの変更、および InnoDB テーブルスペースのサイズの変更

このセクションでは、InnoDBRedo ログファイルの数またはサイズを変更する方法、および InnoDBシステムテーブルスペースのサイズを増加または減少する方法について説明します。

InnoDB ログファイルの数またはサイズの変更

MySQL 5.6.7 以前で InnoDB の Redo ログファイルの数またはサイズを変更するには、次の手順を実行します。

  1. innodb_fast_shutdown が 2 に設定されている場合は、innodb_fast_shutdown を 1 に設定します。

    mysql> SET GLOBAL innodb_fast_shutdown = 1;
    
  2. innodb_fast_shutdown が 2 に設定されていないことを確認したあとに、MySQL サーバーを停止し、エラーなしでシャットダウンされること (ログ内に未処理のトランザクションに関する情報が存在しないこと) を確認します。

  3. シャットダウン中に何か問題が発生して、テーブルスペースをリカバリするために古いログファイルが必要となる場合に備えて、それらのログファイルを安全な場所にコピーします。

  4. ログファイルディレクトリから古いログファイルを削除します。

  5. my.cnf を編集して、ログファイルの構成を変更します。

  6. MySQL を再起動します。mysqld によって、起動時に InnoDB ログファイルが存在しないことが表示され、新しいログファイルが作成されます。

MySQL 5.6.8 の時点では、InnoDB ログファイルの数またはサイズを変更する際に、innodb_fast_shutdown 設定が関連しなくなりました。さらに、古いログファイルを削除する必要もなくなりました。ただし、バックアップとして古いログファイルを安全な場所にコピーすることはあります。InnoDB のログファイルの数またはサイズを変更するには、次の手順を実行します。

  1. MySQL サーバーを停止し、エラーなしでシャットダウンされることを確認します。

  2. my.cnf を編集して、ログファイルの構成を変更します。ログファイルのサイズを変更するには、innodb_log_file_size を構成します。ログファイルの数を多くするには、innodb_log_files_in_group を構成します。

  3. MySQL サーバーを再起動します。

InnoDBinnodb_log_file_size が Redo ログファイルのサイズと異なることが検出された場合は、ログチェックポイントが書き込まれ、古いログファイルが閉じられてから削除され、リクエストされたサイズで新しいファイルが作成され、その新しいログファイルが開かれます。

InnoDB テーブルスペースのサイズの増加

InnoDB システムテーブルスペースのサイズを大きくするもっとも簡単な方法は、最初から自動拡張として構成することです。テーブルスペース定義内の最後のデータファイルに autoextend 属性を指定します。これにより、InnoDB が領域を使い果たすと、そのファイルのサイズが自動的に 8M バイトずつ増加します。innodb_autoextend_increment システム変数の値を設定すると、増分のサイズを変更できます。このサイズは、M バイト単位で測定されます。

別のデータファイルを追加すると、システムテーブルスペースを定義された量だけ拡大できます。

  1. MySQL サーバーをシャットダウンします。

  2. 以前の最後のデータファイルが autoextend というキーワードを使用して定義されている場合は、実際に増加した大きさに基づいて、固定サイズが使用されるようにその定義を変更します。データファイルのサイズをチェックし、それを 1024 × 1024 バイト (= 1M バイト) にもっとも近い倍数に丸め、この丸められたサイズを innodb_data_file_path に明示的に指定します。

  3. 新しいデータファイルを innodb_data_file_path の末尾に追加します。これにより、オプションでそのファイルが自動拡張になります。innodb_data_file_path で自動拡張として指定できるのは、最後のデータファイルのみです。

  4. 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 テーブルスペースのサイズの減少

現在は、システムテーブルスペースからデータファイルを削除できません。システムテーブルスペースのサイズを小さくするには、次の手順を使用します。

  1. 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)
          
  2. サーバーを停止します。

  3. ibdata および ib_log ファイルを含む、すべての既存のテーブルスペースファイル (*.ibd) を削除します。MySQL データベース内に配置されているテーブルの *.ibd ファイルも忘れずに削除してください。

  4. InnoDB テーブルのすべての .frm ファイルを削除します。

  5. 新しいテーブルスペースを構成します。

  6. サーバーを再起動します。

  7. ダンプファイルをインポートします。

注記

データベースで InnoDB エンジンのみが使用されている場合は、すべてのデータベースをダンプし、サーバーを停止し、すべてのデータベースおよび InnoDB のログファイルを削除し、サーバーを再起動し、ダンプファイルをインポートした方が簡単な可能性があります。


User Comments
  Posted by Shane Bester on May 8, 2015
The innodb log files are typically named ib_logfile0, ib_logfile1, ib_logifleN where N is less than the number returned by select @@global.innodb_log_files_in_group;
Sign Up Login You must be logged in to post a comment.