私はここでこの解決策に従っています 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バイト!
@RickJames および @drogart からの2つの回答は、本質的には救済策です。 (それぞれに+1)。
あなたが提示したエラーログから、最後の2行は言う:
InnoDB:エラー:ログファイル./ib_logfile0のサイズが0である134217728バイト
InnoDB:.cnfファイルで指定されたものより0 268435456バイト! `
その時点で、 innodb_log_file_size をmy.cnf
で256M(268435456)に設定しているのに対し、InnoDBトランザクションログ(ib_logfile0
、ib_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ログファイルが作成されていることを通知するメッセージが表示されます。
ログのエラーに基づいて、私はあなたがこれをしたと思います:
ログファイルのサイズを変更する場合は、古いログファイルを削除する必要があります。既存のファイルが構成ファイルで指定されたサイズと一致しない場合、Innodbは正常に起動しません。それらを別の場所に移動すると、innodbは起動時に正しいサイズの新しいトランザクションログファイルを作成します。
古いログファイルを単に削除するのではなく、別のディレクトリに移動することをお勧めします。サーバーが稼働して新しいログファイルが実行され、すべてが正常に見えるまでです。
InnoDBのみを実行している場合は、buffer_poolをavailable RAMの約70%に設定する必要があります。
ログのサイズはそれほど重要ではありません。 (Uptime * innodb_log_file_size/Innodb_os_log_written)がおおよそ 3600(1時間)になるように設定するのが最適です。
ログサイズを変更するには、
バッファプールサイズに提供される値にも問題がある可能性があります。それは私の場合に起こったように...
innodb_buffer_pool_size
を増減する場合、操作はチャンクで実行されます。チャンクサイズはinnodb_buffer_pool_chunk_size
構成オプションで定義され、デフォルトは128Mです。詳細については、「InnoDBバッファープールチャンクサイズの構成」を参照してください。
バッファープールのサイズは常にinnodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
に等しいか倍数にする必要があります。 innodb_buffer_pool_size
をinnodb_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
値です。