MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

B.3.3.3 MySQL が繰り返しクラッシュする場合の対処方法

各 MySQL バージョンは、リリース前に多くのプラットフォームでテストされています。 これは、MySQL にバグがないということではありませんが、バグがあってもごく少数であり、見つかることはまれです。 問題が発生した場合は、システムがクラッシュした正確な原因を探すことが常に役に立ちます。問題の修正が迅速に得られる可能性が高まるためです。

まず、問題は mysqld サーバーが停止したことであるかどうか、またはクライアントに関連しているかどうかを判別してください。 mysqld サーバーが稼働している時間を確認するには、mysqladmin version を実行します。 mysqld が停止して再起動された場合は、サーバーのエラーログを確認すると原因が見つかる可能性があります。 セクション5.4.2「エラーログ」 を参照してください。

一部のシステムでは、mysqld が停止した場所のスタックトレースがエラーログに記録されます。 エラーログに書き込まれる変数値は、常に 100% 正しいとは限りません。

予期しないサーバーイグジットの多くは、データファイルまたはインデックスファイルが破損していることが原因です。 MySQL は、各 SQL ステートメントの実行後、クライアントに結果を通知する前に、ディスク上のファイルを write() システムコールを使用して更新します。 (delay_key_write システム変数を有効にして実行している場合、データファイルは書き込まれますがインデックスファイルは書き込まれません。) これは、mysqld がクラッシュしてもデータファイルのコンテンツは安全であることを意味します。フラッシュされていないデータがオペレーティングシステムによってディスクに書き込まれることが保証されているためです。 各 SQL ステートメントのあとに MySQL がすべてのデータをディスクにフラッシュするようにするには、--flush オプションを指定して mysqld を起動します。

これは、通常、次のいずれかが発生していなければ、データが損なわれたテーブルができることはないことを意味します。

何らかのクラッシュが発生している理由を知ることは非常に困難であるため、まず他のユーザーのために機能するものが予期しない終了になるかどうかを確認してみてください。 次のことを試してください。