したがって、私はInnoDBのチューニングにかなり慣れています。テーブルを(必要に応じて)MyIsamからInnoDBに徐々に変更しています。 innodbには約100MBがあるので、innodb_buffer_pool_size
変数を128MBに増やしました。
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
innodb_log_file_size
の値を変更するとき(例:my-cnfの mysqlのinnodb構成ページ コメントを変更して、ログファイルのサイズをバッファサイズの25%に変更しました。したがって、my.cnf次のようになります。
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
サーバーを再起動すると、次のエラーが発生します。
110216 9:48:41 InnoDB:バッファプールの初期化、サイズ= 128.0M
110216 9:48:41 InnoDB:バッファープールの初期化が完了しました
InnoDB:エラー:ログファイル./ib_logfile0はサイズが異なります0 5242880バイト
InnoDB:.cnfファイルで指定されているより0 33554432バイト!
110216 9:48:41 [エラー]プラグイン 'InnoDB' init関数がエラーを返しました。
110216 9:48:41 [エラー]ストレージエンジンとしてのプラグイン 'InnoDB'の登録に失敗しました。
だから私の質問:古いlog_filesを削除しても安全ですか、またはinnodb_log_file_size
変数を変更する別の方法はありますか?
はい、mysqldがシャットダウンしたらログファイルを削除しても安全です。
これを踏まえて、次の手順を実行してください。
mysql -uroot -p... -e"SET GLOBAL innodb_fast_shutdown = 0"
service mysql stop
mv /var/lib/mysql/ib_logfile[01] /tmp
service mysql start
Mysqldを起動すると、ib_logfile0
およびib_logfile1
が再作成されます
試してみる !!!
ログファイルをやり直す前に、InnoDBバッファープール内のすべてのデータをきれいにページアウトします。このオプションは、シャットダウンの約1時間前に設定する必要があります。
SET GLOBAL innodb_max_dirty_pages_pct = 0;
デフォルトでは、 innodb_max_dirty_pages_pct は75(MySQL 5.5+)または90(MySQL 5.5より前)です。これをゼロに設定すると、ダーティページの数がInnoDBバッファープールの1%未満に保たれます。とにかくservice mysql stop
を実行すると、これが実行されます。さらに、シャットダウンにより、REDOログの残りの項目がすべて完了します。このオプションを維持するには、/ etc/my.cnfに追加するだけです。
[mysqld]
innodb_max_dirty_pages_pct = 0
私は innodb_fast_shutdown で私の答えをもう少し更新しました。これは、これを行うためにmysqlを再起動してmysqlを停止していたためです。現在、コミットされていないすべてのトランザクションにはInnoDBトランザクションログの内部および外部に他の可動部分がある可能性があるため、この1ステップは非常に重要です( InnoDBインフラストラクチャを参照してください )。
innodb_fast_shutdown を2に設定すると、ログもクリーンアップされますが、さらに多くの可動部分が存在し、クラッシュ時に選択されることに注意してくださいmysqldの起動時の回復。 0の設定が最適です。
代わりに 公式メソッド をお勧めします。
MySQL 5.6.7以前のInnoDBログファイルの数またはサイズを変更するには、次の手順に従います。使用する手順は、シャットダウン操作の前にシステムテーブルスペースを完全に最新にするかどうかを決定するinnodb_fast_shutdownの値によって異なります。
Innodb_fast_shutdownが2:に設定されていない場合、MySQLサーバーを停止し、エラーなしでシャットダウンすることを確認して、REDOログに未処理のトランザクションに関する情報がないことを確認します。シャットダウン中に問題が発生し、テーブルスペースを回復する必要がある場合に備えて、古いREDOログファイルを安全な場所にコピーします。ログファイルディレクトリから古いログファイルを削除し、my.cnfを編集してログファイルの設定を変更し、MySQLサーバーを再起動します。 mysqldは、起動時にInnoDBログファイルが存在しないことを確認し、新しいログファイルを作成します。
Innodb_fast_shutdownが2に設定されている場合:innodb_fast_shutdownを1に設定します。
mysql> SET GLOBAL innodb_fast_shutdown = 1;
次に、前の項目の指示に従います。
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_buffer_pool_size
-my.cnf
(my.ini
)を変更してmysqldを再起動するだけです。
innodb_log_file_size
はそれほど重要ではありません。理由がない限り変更しないでください。ローランド 手順を提供した場合 ですが、1つの側面で私は心配しています...最初の2つの手順が重要かどうかはわかりません。彼らはそうである可能性があるようです:
set innodb_fast_shutdown = OFF
ログファイルは、未完了のビジネスを追跡します。 " innodb_fast_shutdown
"はその問題に対処するように言っていますafter再起動しています。ファイルを削除すると情報が失われる可能性がありますか?
新しいバージョンでは改善されています:(コメントでより多くの議論)
innodb_log_file_size
> 4GBを許可innodb_log_file_size
は、最初にiblogを削除せずに変更できます*innodb_buffer_pool_size
log_file_sizeを変更する必要がありますか?
GLOBAL STATUS
を使用して、ログが循環するまでの分数を計算します。
Uptime / 60 * innodb_log_file_size / Innodb_os_log_written`
lessが60(分)よりも多い場合は、log_file_sizeを増やすと役立つ場合があります。それ以上の場合は、ログファイルがディスク領域を浪費しています。その「1時間」はかなり恣意的であるため、それに近い場合は、わざわざlog_file_sizeを変更しないでください。
innodb_log_files_in_group
はデフォルトの2のままにします。
Mysqlにログオンしたら、次のコマンドを入力します。
pager grep seq;
show engine innodb status \G select sleep(60); show engine innodb status \G
2つの数字が表示されます。最初にあなたはそれを手に入れ、それから1分待ちます。あなたは別のものを取得します。
最初のものが3.456.718.123で、2番目のものが4.098.873.134だとします。
現在(4.098.873.134-3.856.718.123)* 60/1024/1024
結果は13.856 MBです。
2つのログファイルがあります。したがって、2で除算すると、7000 MBに近い数値になります。念のため、ログファイルのサイズを8GBに設定してください