スケールアップ：MySQLのバグの話、あるいはAivenが機能する理由

<font color="Grey">*[Scale up: a MySQL bug story, or why Aiven works](https://aiven.io/blog/mysql-bug-story-or-why-aiven-works)の翻訳です。*</font>

2023年7月6日

# スケールアップ：MySQLバグの話、あるいはAivenが機能する理由

なぜAivenをMySQLサービスに使うのか？答えは簡単です。マネージドサービスを利用することで、スケールメリットを享受できるからです。


大企業のお客様からのご質問で最も多いのが、なぜ自社でデータベースやストリーミングサービスを管理せずにAivenを選択するのかというものです。マネージドサービスに追加料金を支払うことがコスト削減につながるというのは、直感に反するように思われるかもしれません。しかし、規模の経済、特に専門的な知識やツールへのアクセスを考慮すると、マネージド・サービスを選択するケースが明らかになります。今年初め、MySQLをご利用のお客様で、Aivenへの投資がバグフィックスという形で実を結びました。


## 何が起こったか


2023年1月、当社のサイト信頼性エンジニアリングチームは、一部のMySQLデータベースが再起動ループに陥っているという報告を受け始めました。エイブンの SRE チームは、このようなインスタンスに対するプレイブックを用意しています。つまり、ノードがスタンバイに優雅にフェイルオーバーできるようにしているのですが、何らかの理由でこのプロセスが機能していませんでした：SREは手動でノードを再起動してリストアしなければならず、数日から数週間以内に顧客（時には同じ顧客）が再停止に直面していました。


さらに、SREチームが顧客のデータベースをオンラインに戻したとしても、バックアップからリストアするのは困難で、データが破損していることがよくありました。


AivenのSREチームは当初、この問題を「断続的すぎて追跡できない」と感じていました。最終的な統計によると、Aivenの数万人の顧客のうち、影響を受けたのは1%未満で、SREチームはこのパターンに一致するインシデントを、せいぜい週に数回しか確認していませんでした。


しかし、数週間のうちに、SREチームは十分な数の顧客から報告を受け、より広範なインシデントが発生していることに気づき、調査作業を開始しました。


## 探偵の仕事：規模の経済の力


Aivenの企業顧客のほとんどは、自社でサイト信頼性エンジニアリング・チームを持っています。では、なぜAivenのような企業に価値を見出すのでしょうか？シンプルな答えは、Aivenのスケールメリットです。Aivenにとって、高品質のデータベース・スペシャリストや優秀なSREを雇うことは、顧客がそうするよりも効率的です。また、Aivenが提供するサービスのために開発できる時間投資やツールは、超大手企業にとっても意味のあるものではありません。


AivenのSREチームとデータサービスチームがさらに調査を進めた結果、問題の核心はMySQL 8.0.30で導入されたデータ型の変更に関連していることがわかりました。問題のある行で `SELECT` を使用すると、再起動ループが発生し、さらにその行のデータが破損するため、今後エラーが発生する可能性が高くなります。


Aivenのデータサービスチームは、数千のデプロイメントをスキャンしてこのエラーを発見しました。


## ツールで1万件のバグをつぶす


AivenはMySQL 8.0.30とMySQL 8.0.31のソースコードを比較し、問題の原因となったコードのブロックを特定しました。これは些細なことのように聞こえますが、実際にはエンジニアの一人がMySQLの何百ものコミットをスキャンして変更を特定しました。


MySQLを8.0.31にアップグレードすることが緩和策のように思えますが、Aivenはお客様のために堅牢なバックアップを提供しています。AivenがMySQLデータベースのバックアップを作成・管理するために使用しているツールは、MySQLのバージョンリリースに遅れをとっています。簡単に言えば、MySQLをアップグレードすると同時にバックアップの約束を守ることができなかったのです。


MySQLのアップグレードとバックアップの約束を同時に行うことはできません。個々の企業であればアップグレードを選択するかもしれませんが、Aivenは何千もの顧客のために大規模な運用を行っているため、別の選択肢がありました。これにより、ロバストで準拠したバックアップツールの運用を継続し、お客様の問題を軽減することができました。


さらに、Aivenのチームは、起動時にすべてのMySQLデータベースを再構築する小さなスクリプトを開発しました。こうすることで、問題が発生したお客様だけでなく、すべてのMySQLデータベースのお客様に変更が適用されるようにしました。


## 独自のローリングが危険な場合


このようなエラーは、自社でデータベース・インフラを管理している企業にとっては、あまりに見つけにくいものです。Aiven for MySQLの数万人の顧客全体で、この問題を確認したのはわずか100回強で、報告を受けたのはほんの一握りでした。そのうち、この問題を複数回経験した顧客はわずか数人でした。Aivenは30,000以上のMySQLサービスを運営しているため、これは本当にごくわずかな割合です。


自社でインフラストラクチャを管理している企業を卑下するつもりはありませんが、データベースやサイトの信頼性エンジニアリングチームがパターンに気づき、問題を軽減するのに十分なデータを取得できるほど、問題を何度も経験する確率は極めて低いでしょう。しかし、何千もの顧客のためにMySQLを大規模に監視するために高い投資を行っているAivenにとっては、パターンを見抜いて問題を軽減することは容易でした。これが、大企業にとってもマネージド・サービスの力です。あなたのビジネスにとって、この種のツールに投資することは意味がありませんが、わずかな料金で、Aivenのような企業にアクセスすることができます。


では、代わりに何が起こるのだろうか？


あなたのビジネスは、目を見張るようなIT事故に見舞われるだろう。まず、私たちの顧客のように、データベースが再起動のループに巻き込まれるでしょう。最終的にそれを解決したとき、データベースが破損している可能性が高い。賢明であれば、バックアップからデータベースをリストアするはずですが、自動バックアップのセットアップには、小規模な開発チームにはない時間とエネルギーが必要です。多くの場合、潜在的なデータ損失に加えて、非常に長くて問題のある生産停止を抱えることになる。そして、思いもよらないときに、エラーは再び発生することになる。


Aivenでは、お客様が経験した最も長い生産停止時間は約2時間で、お客様が経験した最も長いデータベース再構築時間は約6時間でした。Aivenが本番稼動中に経験したすべての障害のうち、手動でサービスを再起動する必要があったのは1回だけでした。Aivenが使用している堅牢なバックアップ・ツールのおかげで、お客様は最小限のデータしか失いませんでした。私たちの観点では、MySQLとSREのエキスパートが揃った信頼できるパートナーがお客様のデータベースをオンラインに復旧させることは、専門知識がないまま自分で行うよりもはるかに優れた提案です。


## まとめ


Aivenを使用すると、[Aivenコンソール](https://console.aiven.io/)または[Aiven API](https://api.aiven.io/doc/)を使用して直接データベースやストリーミングサービスなどを管理することができます。Aiven for MySQLの詳細については、[ドキュメント](https://docs.aiven.io/docs/products/mysql) またはチュートリアル[デベロッパーセンター](https://aiven.io/developer/mysql) をご覧ください。


まだAivenのお客様ではありませんか？[デモを予約](https://aiven.io/book-demo) してAiven for MySQLを直接お試しいただくか、30日間の無料体験[こちら](https://aiven.io/how-to-get-started-with-aiven) をご利用ください！