web-dev-qa-db-ja.com

innodb_buffer_pool_sizeとinnodb_log_file_sizeを増やした後、mysqlが起動しない

私はここでこの解決策に従っています https://stackoverflow.com/questions/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 と私のinnodb_buffer_pool_size 4G以降の1G(1024Mも)に加えて、ログファイルのサイズに加えて、mysqlはこれらの値で開始しません。 512Mに戻すと、mysqlは正常に起動します。

どうすればこれを解決できますか?私のサーバーは16GBで、Webmin sysinfoによると:

Real memory 15.62 GB total, 3.13 GB used

その間私はエラーログも見つけました:

120529 10:29:32 PIDファイル/var/run/mysqld/mysqld.pidのmysqld_safe mysqldが終了しました

120529 10:29:33 mysqld_safe/var/lib/mysqlのデータベースを使用してmysqldデーモンを開始する

120529 10:29:33 [注意]プラグイン 'FEDERATED'が無効になっています。

120529 10:29:33 InnoDB:InnoDBメモリヒープが無効になっています

120529 10:29:33 InnoDB:ミューテックスとrw_locksはGCCアトミックビルトインを使用します

120529 10:29:33 InnoDB:圧縮テーブルはzlib 1.2.3を使用します

120529 10:29:33 InnoDB:LinuxネイティブAIOの使用

120529 10:29:33 InnoDB:バッファプールの初期化、サイズ= 1.0G

120529 10:29:33 InnoDB:バッファープールの初期化が完了しました

InnoDB:エラー:ログファイル./ib_logfile0のサイズが異なる0 134217728バイト

InnoDB:.cnfファイルで指定されたものより0 268435456バイト!

18
giorgio79

@RickJames および @drogart からの2つの回答は、本質的には救済策です。 (それぞれに+1)。

あなたが提示したエラーログから、最後の2行は言う:

InnoDB:エラー:ログファイル./ib_logfile0のサイズが0である134217728バイト

InnoDB:.cnfファイルで指定されたものより0 268435456バイト! `

その時点で、 innodb_log_file_sizemy.cnfで256M(268435456)に設定しているのに対し、InnoDBトランザクションログ(ib_logfile0ib_logfile1)はそれぞれ128M(134217728)であることがわかりました。質問の 私のStackOverflow回答へのリンク を振り返ると、次のことを行う必要がありました。

ステップ01)これをmy.cnfに追加します。

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

ステップ02)OSでこれらのコマンドを実行します

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

何が起こっているかを確信できるように、エラーログに対してtail -fを実行します。各innodbログファイルが作成されていることを通知するメッセージが表示されます。

19
RolandoMySQLDBA

ログのエラーに基づいて、私はあなたがこれをしたと思います:

  • mysqlをシャットダウンする
  • my.cnfを編集してinnodbログファイルのサイズを変更
  • mysqlを起動しようとしました(失敗しました)

ログファイルのサイズを変更する場合は、古いログファイルを削除する必要があります。既存のファイルが構成ファイルで指定されたサイズと一致しない場合、Innodbは正常に起動しません。それらを別の場所に移動すると、innodbは起動時に正しいサイズの新しいトランザクションログファイルを作成します。

古いログファイルを単に削除するのではなく、別のディレクトリに移動することをお勧めします。サーバーが稼働して新しいログファイルが実行され、すべてが正常に見えるまでです。

4
drogart

InnoDBのみを実行している場合は、buffer_poolをavailable RAMの約70%に設定する必要があります。

ログのサイズはそれほど重要ではありません。 (Uptime * innodb_log_file_size/Innodb_os_log_written)がおおよそ 3600(1時間)になるように設定するのが最適です。

ログサイズを変更するには、

  1. mysqldをきれいにシャットダウンします
  2. my.cnf(my.ini)の値を削除する
  3. ログファイルを削除する
  4. retstart-新しいログファイルが再構築されます。
3
Rick James

バッファプールサイズに提供される値にも問題がある可能性があります。それは私の場合に起こったように...

innodb_buffer_pool_sizeを増減する場合、操作はチャンクで実行されます。チャンクサイズはinnodb_buffer_pool_chunk_size構成オプションで定義され、デフォルトは128Mです。詳細については、「InnoDBバッファープールチャンクサイズの構成」を参照してください。

バッファープールのサイズは常にinnodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesに等しいか倍数にする必要があります。 innodb_buffer_pool_sizeinnodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesと等しくないか倍数でない値に構成すると、バッファープールサイズはinnodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesと等しいか倍数の値に自動的に調整されます。指定されたバッファプールサイズ以上。

この例では、innodb_buffer_pool_sizeは8Gに設定されており、innodb_buffer_pool_instancesは16に設定されています。innodb_buffer_pool_chunk_sizeはデフォルト値である128Mです。

8Gは2Gであるinnodb_buffer_pool_sizeの倍数であるため、8Gは有効なinnodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M値です。

1
SHIVI