mysql innodb変数 'innodb_log_file_size'を安全に変更する方法は?
質問
だから私は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 on 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
試してみる !!!
更新2011-10-20 16:40 EDT
ログファイルをやり直す前に、InnoDBバッファープールのすべてのデータをきれいにページアウトします。シャットダウンの約1時間前にこのオプションを設定する必要があります。
SET GLOBAL innodb_max_dirty_pages_pct = 0;
デフォルトでは、 innodb_max_dirty_pages_pct IS 75(MySQL 5.5+)または90(MySQL 5.5より前)。これをゼロに設定すると、InnoDBバッファープールの1%未満の汚れたページの数が保持されます。パフォーマンス service mysql stop
とにかくこれをします。さらに、シャットダウンにより、REDOログの残りのアイテムが完了します。このオプションを維持するには、/etc/my.cnfに追加するだけです。
[mysqld]
innodb_max_dirty_pages_pct = 0
更新2013-04-19 16:16 EDT
私は自分の答えをもう少し更新しました innodb_fast_shutdown 私はこれを行うためにMySQLを再起動し、MySQLを停止していたからです。現在、このワンステップは、コミットされていないすべてのトランザクションがINNODBトランザクションログの内側と外側の他の可動部品を持っている可能性があるため、不可欠です。INNODBインフラストラクチャを参照してください).
その設定に注意してください innodb_fast_shutdown 2つにログもクリーンアウトしますが、より多くの可動部分がまだ存在し、MySQLDのスタートアップ中にクラッシュの回復で選ばれます。 0の設定が最適です。
他のヒント
代わりにお勧めします 公式方法, 、私はここで利便性のために再現します:
INNODBログファイルの数またはサイズを変更するには MySQL 5.6.7以前, 、次の指示を使用してください。使用する手順は、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_FAST_SHUTDOWNの設定は、INNODBログファイルの数またはサイズを変更するときにもはや関連性がありません。さらに、古いログファイルを削除する必要はなくなりましたが、古いログファイルをバックアップとして安全な場所にコピーしたい場合があります。 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
- mysqlを再起動します
- mysqlを停止します
- logfilesを削除します
- mysqlを開始します
ログファイルは未完成のビジネスを追跡しています。 「innodb_fast_shutdown
「そのようなものに対処するように言います 後 再起動。ファイルを削除すると情報が失われる可能性がありますか?
新しいバージョンが改善されました: (コメントの詳細)
- 5.6は許可します
innodb_log_file_size
> 4GB - 5.6
innodb_log_file_size
最初にiblogを削除せずに変更できます* - 5.7では、動的にサイズを変更できます
innodb_buffer_pool_size
log_file_sizeを変更する必要がありますか?
使用する GLOBAL STATUS
ログサイクルの前に数分数を計算します。
Uptime / 60 * innodb_log_file_size / Innodb_os_log_written`
それがたくさんなら 以下 60(分)よりも、log_file_sizeを増やすのに役立つ可能性があります。それ以上の場合、ログファイルはディスクスペースを無駄にしています。その「1時間」はかなりarbitrary意的なので、あなたがそれに近い場合は、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つを取得してから、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でそれを分裂させると、7.000 MB近くの数が得られます。確かに、ログファイルサイズ8GBを設定します
chown mysql:mysql -r/etc/mysql/var/lib/mysql && cd/var/lib/mysql && rm -f ib_logfile* && service mysql restart ||サービスmysqlの再起動
それを試して、作業が保証されている[Debian 6でテスト