弊社のシステムはAzure Database for MySQLを使っています。
アプリケーションログを監視しているとたまにDBエラーがでているのが確認できます。
エラーのタイミングとして、いっつも出ているわけじゃないけど一度発生すると短時間に大量に出るという、まさに「稀によくある」状態です。
ググってヒットするエラーもあれば、全く他で見たことがないエラーもあるため、Qiitaの皆さんのなかに「それ原因知っているぜ!!」という方がいれば知見をいただきたく、もしくは困っている開発者同士の情報交換の場になればというのがこの記事の趣旨となります。
※並行してAzure調査チームにサービスリクエストを出しているので、そちらで原因がわかったものは追記する予定です。
2019/03/25 Azure調査チームとのやり取りで判明したことなどを追記
SQLSTATE[HY000] [2006] MySQL server has gone away
このエラー自体はググっても見かけるやつです。
ただ、困ったことに数秒でエラーで返ってくることもあれば、数分、数時間後にやっとエラーが返ってくることもあるようです。
(実績があるログなので大丈夫だとは思いますが、たまに数日後にエラーが返ってくるものもあり、ちゃんとログ取れているのかは不安)
一般的には接続中のコネクションが切れた場合などに出るらしいですが、殆どが初期化処理の一番最初の接続時に出ているのでイマイチ原因がわかっていません。
PHPのシステムなので処理終了時に明示的なdisconnectをしていないのだけど、それが原因なのか?というのがありますが、まだ検証しきれていない状況です。
2019/03/25追記
Azure調査チームの見解としては、「MySQLとの接続が確立されたものの使用可能になる前に、何らかの原因で接続が切断された場合に発生するエラー」とのことでした。
とはいえサーバの設定値としてタイムアウトが短いわけでもなく(むしろデフォルトより伸ばしてる)、またアプリケーション側でコネクションプールの設定がされているわけでもありませんでした。
アプリケーション側で単純なリトライ処理を追加してしばらく様子を見たところ、フェイルオーバーで瞬断していると思われるケースは復旧できるようになりました。(割合としては30%)
とはいえ依然駄目なケースも多く、その違いがよくわかりません。
Azureに他社から同様のエラーレポートが来たことはないらしく、再現条件がわからない限りこれ以上の調査は困難とのこと。
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
ググってみると単純な設定ミスらしいのですが、稼働中のシステムでぽつんと1件だけ発生したことがありました。
とはいえ過去1度しか見てないので今後起きない可能性もあります。
SQLSTATE[HY000] [9002] The server name you tried cannot be found. Please use the correct name and retry. Please check your server name [DBサーバ名].
こちらも1つ前と同じく過去1度しか見てないので今後起きない可能性もあります。
SQLSTATE[HY000] [9002] An error occurred when accessing your server. Please retry or report your issues.
ググってもよくわからず、現状お手上げ。(サービスリクエスト中)
2019/03/25追記
フェイルオーバーのタイミングで出るエラーメッセージということがAzure調査チームから確認が取れました。(同時間帯で実際にフェイルオーバーの記録が残っているとの裏付けもあり)
アプリケーション側で単純なリトライ処理を追加したので、次回発生待ち。
SQLSTATE[HY000] [9002] Some errors occured.
ググってもよくわからず、現状お手上げ。
最近は起きておらず、次回発生したときに原因がわからなければサービスリクエストする予定です。
SQLSTATE[HY000] [9002] Server is not ready for incoming connections.
ググってもよくわからず、現状お手上げ。
こちらも最近は起きておらず、次回発生したときに原因がわからなければサービスリクエストする予定です。
SQLSTATE[HY000] [9999] An internal error has occurred. Please retry or report your issues.
これは以前発生したときにサービスリクエストを出したんですが、Azure側のログが流れてしまって原因究明には至りませんでした。
ただ、同時刻帯で内部サーバのメンテナンスが発生していたそうなので、その切替の間に発生していた可能性が今のところ濃厚。