🫧

数億リクエストを止めるな。SREが教える「データベース移行」のアンチパターンと実践戦略

に公開
2026/02/11

はじめに

データベースの移行は、単なる「引っ越し」ではありません。
失敗すればデータ破損、長時間のダウンタイム、最悪の場合はビジネスそのものを止めてしまう、エンジニアにとって最も胃が痛くなるプロジェクトの一つです。

私はこれまで、いくつかの大規模サービスで、数億・数十億リクエストをさばくデータベースの移行や信頼性向上(DBRE)に取り組んできました。
その経験をまとめた書籍:『実践DBRE Vol.1』から、今回は 「AuroraからTiDBへの移行」 という少し珍しい、しかし非常に学びの多かった事例を抜粋して紹介します。

「理論はわかったけど、実際どうやるの?」という疑問に、泥臭い現場の実践知でお答えします。

その「なんとなく」が事故の元。移行における3つの観点

移行プロジェクトが失敗する最大の原因は、技術的な難易度よりも 「見えていない依存関係」 や 「曖昧なリスク評価」 にあります。

私が移行プロジェクトに入るときは、まず以下のフレームワークで現状を整理します。

  1. リスク評価(Risk Management)
  2. 依存関係分析(Dependencies & Architectural Inventory)
  3. 移行計画(Planning)

1. リスク評価グリッド

「すべてのリスクをゼロにする」ことは不可能です。限られたリソースで戦うために、リスクを「発生頻度」と「影響度」で分類し、優先順位をつけます。

特に 「頻度は低いが、起きるとサービスがやばい(影響大)」 リスク(発生時の備えと検知・復旧手順の整備)に対する検知・復旧手順が整備されているか?ここがSREの腕の見せ所です。

図1:リスク評価グリッド(『実践DBRE Vol.1』より)

低頻度 高頻度
影響大 発生時の備えと検知・復旧手順の整備 最優先
影響小 必要に応じて最低限の対応 自動化などで運用負荷を下げる検討

2. 依存関係の可視化

「このDBはアプリAしか使っていないはず」と思い込んで移行したら、実は 「月次バッチB」 や 「分析ツールC」 も繋がっていて、切り替え時にそれらが全滅した……というのは「あるある」です。

これを防ぐために、アーキテクチャインベントリを作成し、依存関係を図解します。見栄えは二の次で、「誰がどこに繋がっているか」をチーム全員が指差し確認できる状態にすることが重要です。

図2:依存関係図の例(『実践DBRE Vol.1』より)

カテゴリ 内容
データセンター/環境 オンプレミス、各クラウドリージョン、本番・ステージング・検証環境など
アーキテクチャコンポーネント/ティア ・アプリケーションサーバー
・ロードバランサー
・キャッシュ (Redis、Memcached など)
ストレージ オブジェクトストレージ、ブロックストレージなど
コンポーネント内の役割 ・プライマリ/セカンダリ
・読み取り専用レプリカ
・バックアップ用インスタンス など
サービス間の相互作用/通信パス ・どのサービスが、どのデータベースに接続しているか
・どの API が、どのバックエンドを呼び出しているか
ジョブやバッチ処理 ・ETL (データ同期・変換)
・定期的な集計・レポート
・キャッシュのリフレッシュ
CDN へのデータロード など -

【実録】Aurora → TiDB 移行の「新旧同期パターン」

ここからは具体的なケーススタディです。
かつて私が担当したプロジェクトでは、大規模キャンペーンによる一時的なアクセス急増に耐えるため、Amazon Auroraから、より水平スケーリングに強い分散データベースTiDBへの移行を決断しました。

しかし、稼働中の大規模サービスを一瞬で切り替えるのは無謀です。
そこで採用したのが 「新旧同期パターン」 です。

移行のステップ

  1. 新旧並行稼働: 旧DB(Aurora)をメイン(書き込み先)としたまま、新DB(TiDB)をレプリカとして配置し、レプリケーションでデータを常に同期させる。
  2. 昇格: 切り替えのタイミングで、新DBをメインに昇格させる。
  3. 逆同期(ここが重要): 新DBがメインになった後も、「新DB → 旧DB」への同期(逆方向レプリケーション)を継続する。

図3:新旧同期パターンの移行構成図(『実践DBRE Vol.1』より)
新旧同期パターンの移行構成図(『実践DBRE Vol.1』より)

この構成の最大のメリットは、 「切り戻し(ロールバック)が数秒でできること」 です。
もし新DBで未知のトラブルが起きても、旧DBには最新データが同期されているため、アプリの接続先を戻すだけで復旧できます。この「命綱」があるからこそ、大胆な移行が可能になるのです。

地味だけど最強の検証術「p6spy」

「MySQL互換」を謳うデータベースは多いですが、100%の互換性を信じてはいけません。
特に大規模トラフィック下では、微妙な挙動の違いが障害の引き金になります。

そこで私たちが徹底したのが、 「本番トラフィックのミラーリング検証」 です。
具体的には、p6spyというJDBCドライバのラッパーツールを使用しました。

  1. キャプチャ: 本番環境(Aurora)で流れるSQLをp6spyですべて記録する。
  2. リプレイ: 記録したSQLを、検証環境のTiDBに対して流し込む。
  3. 比較: 両者の実行結果(ResultSet)とパフォーマンスを比較する。

この検証により、「特定のクエリだけTiDBだと遅くなる」「この関数は挙動が違う」といった地雷を事前にすべて踏み抜き、修正することができました。ドキュメントを読むだけでなく、「自分たちのワークロード」で検証することが何より重要です。もちろん安全な環境環境を用意して行います。

おわりに:DBAからDBREへ

かつてデータベース管理(DBA)は「設定ファイルを守る仕事」でしたが、これからの時代は信頼性をエンジニアリングする 「DBRE(Database Reliability Engineering)」 へと役割が変わっていきます。

今回紹介した「新旧同期」や「トラフィックリプレイ」は、まさに信頼性をコードとアーキテクチャで担保するDBRE的なアプローチです。

より詳細なリスク管理シートの作り方や、他ケースの移行事例(オンプレ北海道→東京など)、そしてSREチームビルディングの話などは、全3巻のシリーズとしてまとめています。もし興味があれば、手に取っていただけると嬉しいです。

📘 『実践DBRE Vol.1 DBREの基礎とデータベース移行戦略』SRE時代のデータベース運用パラダイムと移行戦略
📘 『実践DBRE Vol.2 大規模システムのスケーラビリティ改善: スケールアウト、シャーディング、分散DBの実践
📘 『実践DBRE Vol.3 運用の信頼性向上とチームビルディング: インシデント対応、SLO/SLI設計、チーム連携の実践

GitHubで編集を提案

Discussion