Share
Embed
運用中タイトルでも移行できる!!ゲーム業界初AuroraからTiDBへのゲームデータ移行の舞台裏
2025年5月30日に開催された「TiDB GAME DAY2025」(運営:PingCAP)で登壇した際の資料です。
運用6年目のとある音ゲープロジェクトで、AuroraからTiDBへの移行事例について発表しました。
移行の背景やTiDBを採用した理由、具体的な移行方法について紹介しています。
また、TiDB運用の最適化、コネクションプーリングに関する課題、移行時の調整や手順についても触れています。
シャーディングされたDBの統合や、全環境をTiDBに載せ替えるという大きなチャレンジがありましたが、
事前検証を重ねながら進めた移行プロセスの実例と、そこで得られた知見についてお話ししました!!
altplus Inc.
June 04, 2025
Transcript
144 slides
-
オルトプラスではTiDB Cloudを使用しています • Cloud Provider:AWS ◦ TiDB Cloud Serverless:v7.5.2 ◦
TiDB Cloud Dedicated:v8.1.2 はじめに -
© 2025 AltPlus Inc. フルボイス・ヴィジュアルノベルプロジェクト始動 8 アース・スターノベル 10周年夏祭り にてアプリ内容について公開予定
①アプリ内容の紹介 ②主要キャストの登壇 ③キャストによるミニ朗読劇の開催 詳しくはQRコードもしくは以下URLまで https://www.es-novel.jp/special/10th/ <作品概要> 原 作 :夾竹桃(きょうちくとう) イラスト :平沢下戸 漫 画 :沢田一 原作ノベル:1巻~18巻発売中 漫画作品 :1巻~17巻発売中 あらすじ : 主人公は農業高校の女子高生! 農業高校に通う歴史好き女子高生、綾小路静子はある日の学 校の帰り道、突如戦国時代へとタイムスリップしてしまう。 目の前に現われたのは――憧れの織田信長!? 信長の兵に捕らえられ、咄嗟に「農業で才を示す」と約束し てしまった静子は、尾張国の農業改革に乗り出すことになり …!? ⒸKyouchikutou/Hirasawa Geco 2025年7月19日(土)開催 『戦国小町苦労譚』小説のフルボイス・ヴィジュアルノベルアプリ開発決定! 累計発行部数300万部を超える大ヒット作品『戦国小町苦労譚』初の フルボイスによるヴィジュアルノベルアプリケーションが開発決定いたしました!! 『戦国小町苦労譚』は、夾竹桃先生による原作をもとにアース・スター エンターテイメントより 小説およびコミカライズとして長年にわたり展開されてきた大ヒット作品です。 -
© 2025 AltPlus Inc. オルトプラスについて:こんなことやってますーー!! 9 • 音ゲー(リズムゲーム) • オンラインクレーンゲーム
• 麻雀エンジン作って売ったり • 海外タイトルをローカライズ配信(開発中) プロダクトの例 「自社パブリッシング・受託開発・共同開発」などなど ソーシャルゲームの「企画、開発及び運営」など -
© 2025 AltPlus Inc. TiDB導入の背景 12 運用6年目を迎えた音ゲープロジェクトでは、 Auroraクラスター(Provisioned)が最大3台 に増加し、それに伴うインフラコストが 大きな負担となっていました。
運用中にAurora Serverless v2に変更するなど いろいろ試行錯誤がありました -
© 2025 AltPlus Inc. TiDB導入の背景 16 ユーザーIDが 1-10000のみ対象 ユーザーIDが 10001-20000のみ対象
ユーザーIDが 20001以降対象 シャーディング戦略としてRange Shardingを導入 (Hash Shardingは移行が必要なため不採用) リリース時 運用中盤 新規流入 -
© 2025 AltPlus Inc. TiDB導入の背景 17 古参ユーザーが多いため リソース使用の割合は 中程度 最もアクティブなユーザー
が多いためリソース使用 割合が最も多い 新規ユーザーのリソース 使用割合は小程度だが、 今後増加する見込み 但し、Range Shardingにより、 クラスター間のリソース使用の偏りが問題となる リソース(中) リソース(大) リソース(小) リリース時 運用中盤 新規流入 -
© 2025 AltPlus Inc. TiDB導入の背景 19 シャーディングの統合 リソースの統合 TiDBの分散機能によりデータと負荷が 自動分散されシャーディングが不要に!!
その結果1つのクラスターで運用できるため、 リソース使用の調整が柔軟に!! -
© 2025 AltPlus Inc. TiDB導入の背景 20 • コストカット • シャーディングの統合
• 柔軟なリソース調整 TiDBを導入することで下記実現できました!! -
© 2025 AltPlus Inc. 自己紹介 24 株式会社オルトプラス 技術部/副部長 Hiromu Kusumoto
楠元 大夢 2022年11月にオルトプラスに入社 現在は音ゲープロジェクトにおいて、サーバーサイドのプロジェ クトリーダーを務めています。スケジュール調整や他部署とのや り取り調整が主な担当業務ですが、 CS調査や集計など開発以 外の業務はひと通り対応しています。 -
© 2025 AltPlus Inc. プロジェクト視点で見極めたTiDB導入の決断:①基本動作に問題がないこと 30 • TiDB接続確認 ◦ Ruby
on Railsのライブラリ接続 • API実行確認 ◦ 主要なデータ取得や更新系APIが意図通り動作 • 課金確認 ◦ 課金によるアイテム付与や通貨増減 確認ポイントの例 -
© 2025 AltPlus Inc. プロジェクト視点で見極めたTiDB導入の決断:②パフォーマンスに不安がないこと 34 • API応答時間確認 ◦ 通常時およびイベント時相当のリクエストで、
ユーザー体感に支障ない応答時間であること • 同時接続数への耐性確認 ◦ 想定ピーク時の同時接続数で処理を継続できること • 負荷分散確認 ◦ スケールアウトを行うことで負荷が安定すること 確認ポイントの例 負荷試験ツールは「Locust」を使用 -
© 2025 AltPlus Inc. [補足]TiDBのコネクションプーリングの問題 37 • Railsのコネクションプーリングにより、 アプリサーバーとの接続はすでに確立された状態 •
スケールアウトしても新ノードには接続されない • Rails側にタイムアウト設定がないため、 接続の再確立が行われない 結果として既存ノードにアクセスが集中 -
© 2025 AltPlus Inc. [補足]TiDBのコネクションプーリングの問題 38 ・・・ TiDB server TiDB
server TiDB server 接続はすでに 確立された状態 TiDB server TiDB server 接続が確立されているため Railsから新ノードに接続されない スケール アウト -
© 2025 AltPlus Inc. [補足]TiDBのコネクションプーリングの問題:解決(TiDBスケールアウト) 39 ・・・ TiDB server TiDB
server TiDB server TiDB server TiDB server ・・・ ②スケールイン ①スケールアウト ①APPサーバーをスケールアウトすることで新ノードに接続 ②不要なサーバーはスケールインすることで対応する -
© 2025 AltPlus Inc. プロジェクト視点で見極めたTiDB導入の決断:③時間内で無理なく移行できること 42 • リハーサルによる作業時間の測定 ◦ 本番同等のデータ量・構成で移行作業を再現し、
各工程の所要時間を計測 ◦ 作業全体が時間内に収まることを確認 • 手順の明文化と共有 ◦ 作業手順をドキュメント化 ◦ 関係者全員にスケジュールを事前展開 確認ポイントの例 -
© 2025 AltPlus Inc. [補足]定期メンテナンス内に納めるための工夫 44 メンテナンス開始 メンテナンス明け 定期メンテナンスの時間軸 メンテナンス時間は変更しない想定での計画
本番移行の時間軸 スケジュールは カツカツな状態 定期メンテナンスの影響を避 けつつ、本番移行を並行して 実施するための調整を行った 影響はこのくらい(Dumpling) -
© 2025 AltPlus Inc. 安定稼働のための改善施策と今後の課題 49 • TiDBのスケールイン ◦ スケールインは影響があるので難しい
◦ 今の所はメンテ時に対応するなど • TiPloxyを使うかどうか? ◦ TiKVのスケール中のTiDB接続断にも 役にたつので要検討 今後の課題:TiDBのコネクションプーリング -
© 2025 AltPlus Inc. [APPチーム編] まとめ 50 TiDB移行における重視点と対応策をプロジェクト目線で紹介しました • 基本動作・パフォーマンスを事前に検証
• 移行は並列スケジュールで効率化 • 移行後は負荷対策を最優先で対応 • 今後はコネクションプーリング運用を改善検討 -
© 2025 AltPlus Inc. 自己紹介 52 株式会社オルトプラス 技術部/エンジニアマネージャー kazushige uratani
浦谷 和茂 2023年6月にオルトプラスに入社 プロジェクトを横断的に見ていますー!! SRE見ていますー!! 入社してからずっと「 TiDBの推し活」をしてました(笑) TiDBのユーザーコミュニティー「 TiUG」も盛り上げ Ti!! -
© 2025 AltPlus Inc. 移行計画:頭出しや調整 68 "移行できそう" を確認したので、 プロジェクトにTiDBへの移行計画を提案!! •
TiDB移行コストの見積もり • 移行スケジュール • 人員アサインの調整 -
© 2025 AltPlus Inc. 移行計画:頭出しや調整 69 日頃から”TiDB”と騒いでいたので プロジェクトや会社から TiDB?なにそれ?? とはならなかったですが、
TiDBについての説明はちゃんとしました!! -
© 2025 AltPlus Inc. 移行計画:頭出しや調整 72 本番リリースの目標 5周年前に移行を完了させる!! ◦ 2025年01月〜02月の間
移行スケジュール この時点でやることのスケジュールも決めていました -
© 2025 AltPlus Inc. 移行計画 74 これで「TiDB移行プロジェクト始動」の 準備が整いました!! ☑ 移行可能か調査
☑ コスト見積もり ☑ 移行スケジュール ☑ 人員アサイン調整 -
© 2025 AltPlus Inc. 移行手順と確認ポイント 80 ツール 説明 Dumpling (エクスポート)
テーブル定義やバックアップを取得する場合に使用 出力ファイルは「SQL、CSV」、出力先は「ローカル、S3」 分割サイズは256MiBが推奨 TiDB Lightning (インポート) TiDBクラスターへの初期データインポートで使用 インポートモードは「Logical、Physical」 ・Logical:TiDB経由(QUERYを実行して登録) ・Physical:TiKV経由(KVペアを直接登録) sync-diff-inspector (整合性チェック) 移行データを比較する場合に使用(チェックサム) テーブル定義或いはデータ不一致の場合は修正用のQUERYを出力 検討した結果下記ツールを採用 -
© 2025 AltPlus Inc. 移行手順と確認ポイント 81 ツールの選定が完了したため、実際に各ツールを 動かしながら移行手順を確立していきます ここから先はTiDB Cloudを使用して検証!!
尚、移行についての説明は本番環境だと複雑なため、 検証環境の構成をメインに解説していきます -
© 2025 AltPlus Inc. 移行手順と確認ポイント dev-altplus(123456789000) 移行のイメージ(全体像) dumpling tidb-lightning tiup
db_user db_admin シャーディング 統合 db_admin db_user_01 db_user_02 シャーディング sync_diff_inspector 82 t tidb cloud -
© 2025 AltPlus Inc. 移行手順と確認ポイント 83 dev-altplus(123456789000) [準備]プライベートエンドポイント接続設定 AWS PrivateLink
TiDB Cloudでは、PrivateLinkを使用したプライベートエンドポイント は必須ではありませんが推奨されています t tidb cloud -
© 2025 AltPlus Inc. [補足]PrivateLinkが推奨される理由 84 • TiDB Cloudで推奨される安全な接続方法 •
通信がパブリックインターネットを経由しない ◦ AWSネットワーク内で完結できる • ネットワーク分離とセキュリティの強化が可能 パブリックエンドポイントは簡易ですが、 セキュリティ要件が高い環境ではPrivateLinkの利用が望ましいです!! -
© 2025 AltPlus Inc. [補足]PrivateLinkの選定理由 85 VPC Peeringも似た接続方法なのですが・・・ VPC PeeringはTiDB
Cloud Serverless非対応 のためPrivateLink一択になりました!! TiCDCを使ってクロスリージョン同期を行う際にVPC Peeringを利用 -
© 2025 AltPlus Inc. 移行手順と確認ポイント 86 dev-altplus(123456789000) [準備]TiDBテーブル定義変更対応 db_user db_admin
db_admin tidb-nodata.dmp 書き換え (例:AUTO_INCREMENT の削除など) db_user_01 db_user_02 シャーディングされたテーブル定義は「01」のみを取得し、 TiDB向けにdmpファイルを書き換えてリストアを実施する t tidb cloud -
© 2025 AltPlus Inc. [補足]テーブル定義の書き換え Ruby on RailsのTurntableを使用していて、 IDの重複が発生しない設計になっていたため、 AUTO_INCREMENTを削除しました
TiDBで採番の仕組みを使用するなら AUTO_RANDOMに書き換えれば問題ないです 87 -
© 2025 AltPlus Inc. 移行手順と確認ポイント 88 • S3 ◦ Dumpling出力ファイルの格納場所
◦ TiDBからのアクセス権限 • 移行ツールのインストール スナップショットと同様に設定します [準備]その他準備するもの -
© 2025 AltPlus Inc. 移行手順と確認ポイント:Dumpling 90 dev-altplus(123456789000) Dumplingを使用したエクスポート dumpling tidb-lightning
tiup db_admin db_user_01 db_user_02 非シャーディング用 パラメータで取得 シャーディング01用 パラメータで取得 シャーディング02用 パラメータで取得 シャーディングと 非シャーディングのデータを S3にエクスポート -
© 2025 AltPlus Inc. 移行手順と確認ポイント:Dumpling 91 ENVIRONMENT="development" HOST_NAME="localhost" USER="root" PASS="*******"
PORT=3306 DATABASE="db_admin" FILE_TYPE="sql" THREADS=2 ROWS=70000 CONSISTENCY="lock" OUTPUT="s3://bucket/prefix/" 移行元(MySQL or Aurora)の環境を設定(今回の例では未使用) 移行元(先)のデータベース(今回の例では未使用) ファイルタイプはsqlとcsvで変わらないのでsql 移行元のコア数に合わせる テーブル内のデータを並列に処理してエクスポート速度を向上 明示的に指定していますがautoでよいです S3の出力先(S3のprefixまで) パラメータの例(非シャーディング) 移行元の接続情報 (パスワードは隠蔽する: 環境変数やParameter Store) -
© 2025 AltPlus Inc. 移行手順と確認ポイント:Dumpling 92 ENVIRONMENT="development" HOST_NAME="localhost" USER="root" PASS="*******"
PORT=3306 SOURCE_DATABASE="db_user_01" TARGET_DATABASE="db_user" FILTER_TABLE_01="${SOURCE_DATABASE}.user_*" FILTER_TABLE_02="${SOURCE_DATABASE}.other_table" FILE_TYPE="sql" THREADS=2 ROWS=70000 CONSISTENCY="lock" OUTPUT="s3://bucket/prefix/" OUTPUT_FILENAME_TEMPLATE="${TARGET_DATABASE}.{{.Table}}_1_{{.Index}}" パラメータの例(シャーディング) 移行元(SOURCE)と移行先(TARGET)のデータベース 移行先はシャーディング統合のデータベース エクスポート対象のテーブルを個別に指定する 「*」を使うことで、指定したパターンに一致 するテーブルをまとめて対象にできます (例:user_*でuser_01, user_abcなど) シャーディングを統合する上で最も重要なパラメータ -
© 2025 AltPlus Inc. 移行手順と確認ポイント:Dumpling 93 OUTPUT_FILENAME_TEMPLATE= "${TARGET_DATABASE}.{{.Table}}_1_{{.Index}}" インポート時のファイル名のパターンマッチに必要です!! 尚、Golangテンプレートの形式{{.DB}}、{{.Table}}、{{.Index}}が使用可能
パラメータ「OUTPUT_FILENAME_TEMPLATE」を深堀 シャーディング先の データベースを明示的に指定 対象のテーブル名 データファイルの チャンクID -
© 2025 AltPlus Inc. db_user.user_table_1_0000000070000.sql 移行手順と確認ポイント:Dumpling 94 OUTPUT_FILENAME_TEMPLATE= "${TARGET_DATABASE}.{{.Table}}_1_{{.Index}}" パラメータ「OUTPUT_FILENAME_TEMPLATE」を深堀
同一テーブルがS3にアップロードされる際、 重複しないようにシャーディング番号を明示的に指定する -
© 2025 AltPlus Inc. 移行手順と確認ポイント:Dumpling 95 tiup dumpling --no-schemas -u${USER}
-p${PASS} -P${PORT} -h${HOST_NAME} --filter ${FILTER_TABLE_01} --filter ${FILTER_TABLE_02} --filetype ${FILE_TYPE} --threads ${THREADS} --rows ${ROWS} --consistency ${CONSISTENCY} --output ${OUTPUT} -F256MiB --output-filename-template ${OUTPUT_FILENAME_TEMPLATE} Dumpling実行の例 非シャーディング・シャーディングそれぞれ実施します!! 環境変数に指定した値をパラメータとして設定して実行すればOKです 今回の例では 非シャーディングは不要 データのみ(スキーマは取得しない) 推奨値 -
© 2025 AltPlus Inc. 移行手順と確認ポイント:Dumpling 96 [OK] dump data successfully,
dumpling will exit now [NG] 1回もエラーになったことがない 初回にAccess deniedになったくらい -
© 2025 AltPlus Inc. 98 シャーディング01 シャーディングID+ チャンクIDで重複なし 同名のテーブルが複数のデータベースに存在していても、 シャードごとに分割されることで重複のないファイル出力が可能
シャーディング02 シャーディングID+ チャンクIDで重複なし [補足]S3にアップロードされたファイルの例:シャーディング -
© 2025 AltPlus Inc. 移行手順と確認ポイント:TiDB Lightning 100 TiDB Lightningを使用したインポート dev-altplus(123456789000)
dumpling tidb-lightning tiup db_user db_admin TOML設定 TOMLを設定しtidb-lightningでインポート (S3にエクスポートされたファイルはTOMLのpattern設定 によってシャーディング・非シャーディングを問わず 自動的にパースされるように設定しています) t tidb cloud -
© 2025 AltPlus Inc. [補足]今回説明するインポート処理について 101 ※移行にはTiDB Cloudの インポート機能を使用しましたが、 内部的にTiDB
Lightningと同等のため、 Lightningの仕組みを元に説明します -
© 2025 AltPlus Inc. [補足]TiDB CloudでのTiDB Lightning使用時の注意点 102 [Physicalモードが使えない理由] PhysicalモードではPDの情報が必要ですが、
TiDB CloudではPDにアクセスできず、 TOMLに記載することができないため 使用可能なモードはLogicalモードのみ -
© 2025 AltPlus Inc. 移行手順と確認ポイント:TiDB Lightning 103 TOMLの例:tidb-lightning.toml [lightning] level
= "info" file = "/home/ec2-user/.tiup/tidb-lightning.log" [checkpoint] enable = false schema = "tidb_lightning_checkpoint" [tikv-importer] backend = "tidb" [[mydumper.files]] pattern = '(?i)^(?:[^/]*/)*([a-z0-9\-_]+)\.([a-z0-9\-_]+?)(?:_[0-9]+)*[-_](\d+)\.(sql)$' schema = '$1' table = '$2' key = '$3' type = '$4' Logicalモード ログ出力情報 リトライメインなので チェックポイントは外す (設定不要) インポートする上で最も重要なパラメータ -
© 2025 AltPlus Inc. 移行手順と確認ポイント:TiDB Lightning 104 [[mydumper.files]] pattern =
'(?i)^(?:[^/]*/)*([a-z0-9\-_]+)\.([a-z0-9\-_]+?)(?:_[0-9]+)*[-_](\d+)\.(sql)$' schema = '$1' table = '$2' key = '$3' type = '$4' mydumper.filesの動きについて Dumplingでエクスポートされたファイル名から、 「スキーマ(データベース)・テーブル ・チャンクID・ファイルタイプ」をパースする パースされた内容を展開する -
© 2025 AltPlus Inc. schema = 'db_admin' table = 'admin_table'
key = '0000000050000' type = 'sql' schema = 'db_user' table = 'user_table' key = '0000000070000' type = 'sql' 移行手順と確認ポイント:TiDB Lightning 105 pattern = '(?i)^(?:[^/]*/)*([a-z0-9\-_]+)\.([a-z0-9\-_]+?)(?:_[0-9]+)*[-_](\d+)\.(sql)$' ファイルのパース 非シャーディング:db_admin.admin_table-0000000050000.sql シャーディング :db_user.user_table_1_0000000070000.sql schemaとtableが 取得できればOK -
© 2025 AltPlus Inc. 移行手順と確認ポイント:TiDB Lightning 106 tiup tidb-lightning -tidb-user
{} -tidb-password {} -tidb-port {} -tidb-host {} -d s3://bucket/prefix/ -config tidb-lightning.toml TiDB Lightning実行の例 上記パラメータを設定して実行すればOKです DumplingしたS3URL TOMLファイル -
© 2025 AltPlus Inc. 移行手順と確認ポイント:TiDB Lightning 107 [OK] tidb lightning
exit successfully [NG] tidb lightning encountered error -
© 2025 AltPlus Inc. [補足]TiDB Lightningエラーの例:MEDIUMBLOBインポート時(Logicalモード) 108 Error 8025 (HY000):
entry too large, the max entry size is 6291456 SET GLOBAL tidb_txn_entry_size_limit = 10485760; MEDIUMBLOB以上のサイズは 「TiDBの単一行の最大storageサイズはデフォルトで6MiB」であるため、 「txn-entry-size-limit」の上限を上げる必要がある v7.6.0以上 -
© 2025 AltPlus Inc. [補足]TiDB Cloudでのインポート 109 TiDB LightningをTiDB Cloudに対して実行する場合は
Logicalモードしか使えないため、 行サイズ制限の影響を受けることがあります Physicalモードが使えるTiDB Cloudコンソール からのインポートをおすすめします!! -
© 2025 AltPlus Inc. [補足]TiDB Cloudでのインポート:TiDB Cloudコンソール 110 Schemaはあるので「No」 ファイルタイプ
:SQL オルトプラスの例 S3URLを設定 ロールのARNを設定 上記全て入力すると「Connect」が活性化 ボタン押下時にOKであればインポートの画面へ -
© 2025 AltPlus Inc. [補足]TiDB Cloudコンソールでのインポート時の注意点 111 パースに失敗する例:{{.Table}}.1_{{.Index}} TiDB LightningはTOMLの「pattern」に正規表現を使えるため
柔軟なファイル指定が可能です。 一方で、TiDB Cloudコンソールではフォーマットが合わないと パースに失敗してインポートされないため注意が必要です 「.(ピリオド)」だと空振りするので 「_(アンダースコア)」にする必要があります -
© 2025 AltPlus Inc. 移行手順と確認ポイント:sync_diff_inspector dev-altplus(123456789000) sync_diff_inspectorを使用したデータ整合性チェック db_user db_admin db_admin
db_user_02 db_user_01 非シャーディング シャーディング sync_diff_inspector 113 インポート前後のデータを比較し、差分を検出 (非シャーディングとシャーディングで分けて実行する必要があります) t tidb cloud -
© 2025 AltPlus Inc. [data-sources] [data-sources.xxx1] ・・・ [data-sources.xxxN] [routes] [routes.rule1]
・・・ [routes.ruleN] [task] target-configs = ["config1", ・・・“configN”] [table-configs.config1] ・・・ [table-configs.configN] 114 TOMLにおけるテーブルごとの設定項目の整理 接続先(移行元・移行先) の情報を記載 移行元・移行先の指定、比較対象 のデータベースやテーブルなど、 比較タスク全体の設定を記載 テーブル名やスキーマ名の マッピングルールを記載 特定のテーブルに対して個別の比較条件や キーなどを設定([task]のオプション) 移行手順と確認ポイント:sync_diff_inspector -
© 2025 AltPlus Inc. 115 TOMLの例(非シャーディング) ######################### Global config #########################
check-thread-count = 2 export-fix-sql = true check-struct-only = false skip-non-existing-table = false ######################### Datasource config ######################### [data-sources] [data-sources.aurora] host = "aurora-xxx.rds.amazonaws.com" port = 3306 [data-sources.tidb] host = "privatelink-xxx.clusters.tidb-cloud.com" port = 4000 整合性チェックを行うスレッド数(コア数に合わせる) 差分が検出された場合に、修正用のSQLをエクスポート テーブル構造とデータ両方をチェック 全テーブルが揃っている前提でチェック 移行元(Aurora)の接続情報 (ユーザーやパスワードも設定する) 移行先(TiDB)の接続情報 (ユーザーやパスワードも設定する) 移行手順と確認ポイント:sync_diff_inspector -
© 2025 AltPlus Inc. ######################### task config ######################### [task] output-dir
= "/home/ec2-user/.tiup/sync_diff_inspector_output" source-instances = ["aurora"] target-instance = "tidb" target-check-tables = ["db_admin.*"] target-configs = ["config"] ######################### Table config ######################### [table-configs.config] target-tables = ["db_admin.admin_table"] index-fields = ["id"] 移行手順と確認ポイント:sync_diff_inspector 116 TOMLの例(非シャーディング) 移行元と先のテーブルを比較 移行の結果や差分が 検出された場合の出力場所 比較対象テーブルの詳細設定(必要に応じて設定) 例)db_admin.admin_tableのidカラムを キーとして明示的に指定して比較を実施 -
© 2025 AltPlus Inc. ######################### Global config ############# ######################### Datasource
config ######### [data-sources] route-rulesを指定して、[routes] のマッピング設定を追加 ######################### Routes ################# [routes] ######################### task config ############## [task] 移行手順と確認ポイント:sync_diff_inspector 117 TOMLの例(シャーディング) テーブル名やスキーマ名を 移行元と移行先でマッピング するための設定を追加 -
© 2025 AltPlus Inc. [routes.rule-aurora1-1] schema-pattern = "db_user_[01-02]" table-pattern =
"user_aaa" target-schema = "db_user" target-table = "user_aaa" [routes.rule-aurora1-2] schema-pattern = "db_user_[01-02]" table-pattern = "user_bbb" target-schema = "db_user" target-table = "user_bbb" ######################### Datasource config ####### [data-sources] [data-sources.aurora] host = "aurora-xxx.rds.amazonaws.com" route-rules = ["rule-aurora1-1", "rule-aurora1-2"] [data-sources.tidb] host = "privatelink-xxx.clusters.tidb-cloud.com" ######################### Routes ############### [routes] [routes.rule-aurora1-1] [routes.rule-aurora1-2] ######################### task config ############ [task] source-instances = ["aurora"] target-instance = "tidb" target-check-tables = ["user_aaa", "user_bbb"] 移行手順と確認ポイント:sync_diff_inspector 118 TOMLの例(シャーディング) マッピング 青:移行元、赤:移行先、緑:マッピングルール -
© 2025 AltPlus Inc. 移行手順と確認ポイント:sync_diff_inspector dev-altplus(123456789000) db_user_01 ・user_aaa ・user_bbb 119
db_user_02 ・user_aaa ・user_bbb TOMLのマッピングイメージ(シャーディング) db_user ・user_aaa ・user_bbb t tidb cloud -
© 2025 AltPlus Inc. [routes.rule-aurora1-1] schema-pattern = "db_user_01" table-pattern =
"user_aaa" target-schema = "db_user" target-table = "user_aaa" [routes.rule-aurora1-2] schema-pattern = "db_user_01" table-pattern = "user_bbb" target-schema = "db_user" target-table = "user_bbb" [routes.rule-aurora2-1] schema-pattern = "db_user_02" table-pattern = "user_aaa" target-schema = "db_user" target-table = "user_aaa" [routes.rule-aurora2-2] schema-pattern = "db_user_02" table-pattern = "user_bbb" target-schema = "db_user" target-table = "user_bbb" ######################### Datasource config ### [data-sources] [data-sources.aurora1] host = "aurora-xxx01.rds.amazonaws.com" route-rules = ["rule-aurora1-1", "rule-aurora1-2" [data-sources.aurora2] host = "aurora-xxx02.rds.amazonaws.com" route-rules = ["rule-aurora2-1", "rule-aurora2-2" [data-sources.tidb] host = "privatelink-xxx.clusters.tidb-cloud.com" ######################### Routes ### [routes] [routes.rule-aurora1-1] [routes.rule-aurora1-2] [routes.rule-aurora2-1] [routes.rule-aurora2-2] ######################### task config ### [task] source-instances = ["aurora1", "aurora2"] target-instance = "tidb" target-check-tables = ["user_aaa", "user_bbb"] 移行手順と確認ポイント:sync_diff_inspector 120 TOMLの例(複数台のシャーディング) マッピング -
© 2025 AltPlus Inc. 移行手順と確認ポイント:sync_diff_inspector dev-altplus(123456789000) db_user_01 ・user_aaa ・user_bbb 121
TOMLのマッピングイメージ(複数台のシャーディング) db_user ・user_aaa ・user_bbb db_user_02 ・user_aaa ・user_bbb t tidb cloud -
© 2025 AltPlus Inc. [補足]sync_diff_inspectorのシャーディング用TOMLの作成 122 テーブルリスト user_aaa user_bbb ・・・
・・・ ・・・ user_zzz route-rules = ["rule-xxx-n-n"] [routes.rule-aurora-xxx] schema-pattern = "xxx" table-pattern = "xxx" target-schema = "xxx" target-table = "xxx" target-check-tables = ["xxx"] 1つのテーブルで生成する情報 (リスト分繰り返す) 書き込む TOMLを手動で作成するのは手間がかかるため、 Pythonなどのアルゴリズムによる生成が効率的です!! テンプレート -
© 2025 AltPlus Inc. 移行手順と確認ポイント:sync_diff_inspector 123 sync_diff_inspector --config=sync_diff_inspector.toml sync_diff_inspector実行の例 例)シャーディングの場合は
sync_diff_inspector_sharding.toml の様な名前で作成する 非シャーディングとシャーディングの両方を実施します それぞれ専用のTOMLを作成してLightningで実行すればOKです!! -
© 2025 AltPlus Inc. 移行手順と確認ポイント:sync_diff_inspector 124 [OK] A total of
777 table have been compared and all are equal. [NG] The data of `database`.table` is not equal the structure of・・・ -
© 2025 AltPlus Inc. 本番移行 prod-altplus(987654321000) 移行のイメージ(全体像) tiup db_admin db_user_01
db_user_02 db_user_03 db_admin db_user dumpling sync_diff_inspector TiDB Cloud コンソール :Import 126 tidb cloudd -
© 2025 AltPlus Inc. 本番移行 127 • tidb-manager環境構築 ◦ dumpling
▪ パラメータ設定 ◦ sync_diff_inspector ▪ TOML設定 • TiDB Cloud Dedicated作成 ◦ テーブル作成 ◦ ユーザー作成 • PrivateLink作成 • TiDB CloudのS3アクセス設定 • mysql_config_editor設定 • データ整合性チェック ◦ sync_diff_inspector • エクスポート実行 ◦ Dumpling • インポート実行 ◦ TiDB Cloudコンソール 青:本番移行前に実施可能、赤:本番移行時 -
© 2025 AltPlus Inc. 本番移行 prod-altplus(987654321000) 本番移行前に実施可能な環境を構築 tiup db_admin db_user
dumpling sync_diff_inspector TiDB Cloud コンソール :Import 128 tidb cloudd -
© 2025 AltPlus Inc. 本番移行 snapshotから復元してリハーサル環境を構築 db_admin db_user sync_diff_inspector TiDB
Cloud コンソール :Import prod-altplus(987654321000) tiup dumpling db_admin db_user_01 db_user_02 db_user_03 129 tidb cloudd snapshotから復元 -
© 2025 AltPlus Inc. 本番移行 131 リハーサル 環境構築 本番移行 本番環境
の手順を確立 時間計測 時間計測+ 問題ないこと 時間計測+ 問題ないこと リハーサルでは処理時間の計測や問題が発生しないことを確認!! 「再現性のあるリハーサル」を実施することで、 本番も安心して迎えられる状態をつくることがベストです -
© 2025 AltPlus Inc. 本番移行 132 移行PJ始動 リハーサル 環境構築 DEV環境
の手順を確立 QA環境 の手順を確立 STG環境 の手順を確立 REV環境 の手順を確立 その前段としてまずは確実な手順の構築が重要と考えました!! 本番を想定したリハーサルを行うためにも、 各環境での手順を先に固めてからリハーサルに臨みました!! -
© 2025 AltPlus Inc. 本番移行 134 リハーサル通りに「Dumpling」 →dump data successfully,
dumpling will exit now リハーサル通りに「コンソールからインポート」 → -
© 2025 AltPlus Inc. 本番移行 137 移行中に誰かがうっかり端末を操作してしまい 更新されてしまっただけでした💦 問題ないのでデータ移行は完了!! 本番用のsync_diff_inspectorのTOMLは準備していませんでしたが、
リハーサルで実施していたTOMLを変更して急遽対応しました!! -
© 2025 AltPlus Inc. [データ移行編] まとめ 139 • まずはやってみることが大事 •
手順を確立することでスムーズな移行が可能 • 再現性のあるリハーサルの重要性 • 本番時に何かあっても慌てないくらい準備する AuroraからTiDBへの移行事例の紹介を行いました!!