こんにちわ。id:cw-tomitaです。
この記事は、Chatwork Advent Calendar 2020 - Qiita の3日目の記事です。
早速ですが、皆さんはauto incrementなRDBのtableのidにはどのような型を利用されていますか? Chatworkでは多くのテーブルでint型が指定されているのですが、9年前にサービスを開始した時には想像もつかないくらいに多くのお客様に使っていただけるサービスへと成長した結果、int型なauto incrementのidを利用しているテーブルで、レコード数がintの上限を迎えそうなテーブルが複数現れ、どかっとまとめてALTER TABLEを実施するという2020年を代表する一大イベント(?)がありました。
今回は、その時に利用したpt-online-schema-changeというツールを使ってのALTER TABLEの実施に関して、記事を書きたいと思います。
- tl;dr
- pt-online-schema-change とは?
- このツールにたどり着いた理由
- 理由その1:Auroraをbinlog_format =off で運用するようになり、計3回の停止メンテナンスが必要
- 理由その2:binlogでのレプリケーションのAuroraのバグを踏んだ
- gh-ostとの比較
- Chatworkでの実行例
- step1. データ同期の開始 (オンライン)
- step2. テーブルがっちゃんこ 〜 逆向きトリガーの作成 (停止メンテナンス中)
- step3. 逆向きtriggerの削除 & 旧テーブルの削除 (オンライン)
- おまけ. 本番実行時に発生した問題
- step1のコマンド実行後、--critical-load に引っかかってデータ同期が停止
- triggerの作成タイミングで処理が詰まった
- まとめ