直接実行する ALTER TABLE ステートメントは、変更処理中のテーブルをロックし、読み取りおよび書き込みをブロックします。MySQL のオンライン DDL により、プライマリへの影響は軽減されますが、レプリカ上では依然として逐次実行されるため、レプリケーションラグが発生し、本番ワークロードに影響を及ぼす可能性があります。
Data Management Service (DMS) は、ロックフリースキーマ変更機能によりこの課題を解決します。DMS は新しいスキーマを持つ一時テーブルを作成し、完全データおよび増分バイナリログデータをそれらに複製した後、一時テーブルを永続テーブルとして保存します。このプロセスにより、テーブルの可用性は変更中も維持されます。
前提条件
開始する前に、以下の点を確認してください。
データベースインスタンスは、DMS で 安定的な変更 モードまたは [セキュリティコラボレーション] モードで管理されます。詳細については、「制御モード」をご参照ください。
データベースインスタンスでロックフリースキーマ変更機能が有効になっています。詳細については、「ロックフリースキーマ変更機能の有効化」をご参照ください。
以下の例では、シミュレートされた開発環境における ApsaraDB RDS for MySQL インスタンスを使用します。
仕組み
ロックフリースキーマ変更は、以下の 3 段階で実行されます。
一時テーブルの作成 — DMS は、新しいスキーマを使用する一時テーブルを 1 つ以上作成します。
データ同期 — DMS は既存の全行(完全データ)をコピーし、同時に着信する変更(増分バイナリログデータ)をソーステーブルと同期されるまで一時テーブルに継続的に適用します。
テーブルの置き換え — DMS は、同期済みの一時テーブルで元のテーブルを置き換え、その後一時テーブルを削除します。
ロックフリースキーマ変更の実行中は、データベース内に 2 つの一時テーブルが表示されます。置き換え処理が完了すると、両方の一時テーブルは削除されます。
ロックフリースキーマ変更の提出および実行
以下の例では、long_text_a 列のデータの型を big_table テーブルから varchar(1024) から text に変更します。
ステップ 1:チケットの提出(一般ユーザ)
DMS コンソール V5.0DMS コンソール V5.0DMS コンソール V5.0 に一般ユーザとしてログインします。
トップナビゲーションバーで、データベース開発 > データ変更 > ロックレス変更 を選択します。
シンプルモードの場合、左上隅の
アイコンにポインターを合わせて、すべての機能 > データベース開発 > データ変更 > ロックレス変更 を選択します。以下のパラメーターを設定し、提出 をクリックします。「変更用 SQL ステートメント」フィールドには、以下を入力します。
パラメーター 説明 データベース 必須。変更対象のデータベースです。この例では、「セキュリティコラボレーション」モードの poc_devデータベースが選択されています。理由カテゴリ 必須。変更の理由であり、後でチケットを検索するために使用されます。 事業背景 必須。変更の目的であり、不要なコミュニケーションを減らすために記載します。 実行方法 必須。承認後のチケット実行方法です。最終審査者が実行 を選択します。 影響を受ける行数 必須。影響を受ける行数の推定値です。正確な数値を取得するには、提出前に SQL コンソールで COUNTクエリを実行してください。変更用 SQL ステートメント 必須。実行する DDL ステートメントです。この例では、 long_text_aのデータの型をvarchar(1024)からtextに変更するステートメントです。ロールバック用 SQL ステートメント 任意。必要に応じて変更をロールバックするための SQL です。 ステークホルダーの変更 任意。チケットの詳細を閲覧可能で、承認プロセスを支援できる他のユーザです。リストに含まれていないユーザは、DMS 管理者および DBA を除き、チケットを閲覧できません。 ALTER TABLE `big_table` MODIFY COLUMN `long_text_a` text NULL AFTER `name`;チケット詳細 ページで、チケット内容を確認します。
DMS は、SQL ステートメントに対して自動的に事前チェックを実行します。このチェックでは、SQL の構文、ステートメントの種類がセキュリティルールと一致しているか、提出者の権限、およびスキャン対象となる行数の推定値を検証します。承認依頼前のみ、チケットの詳細を変更できます。
事前チェックが正常に完了したら、承認依頼 をクリックし、確認ダイアログで OK をクリックします。
重要チケットを承認依頼すると、以降チケットの詳細を変更できなくなります。
ステップ 2:チケットの承認(DMS 管理者)
DMS コンソール V5.0DMS コンソール V5.0DMS コンソール V5.0 に DMS 管理者としてログインします。
ホームページで、保留中のチケット を マイチケット セクションからクリックします。
マイチケット ページで、該当するチケットを見つけ、チケット番号 列の番号をクリックします。
チケット詳細 パネルで、変更情報を確認し、承認 をクリックします。
コメントを入力し、提出 をクリックします。
ステップ 3:チケットの実行(一般ユーザ)
DMS コンソール V5.0DMS コンソール V5.0DMS コンソール V5.0 に一般ユーザとしてログインします。
チケット詳細 パネルの 実行 セクションで、変更の実行 をクリックします。
実行パラメーターを設定し、実行の確認 をクリックします。
実行の確認 をクリックすると、DMS はタスクを即座に開始します。
パラメーター 説明 デフォルト 実行戦略 タスクの実行タイミングです。「即時実行」を選択すると、確認後に直ちにタスクが開始されます。「スケジュール実行」を選択すると、指定した時間にタスクが実行されます。 即時実行 トランザクション制御 失敗時にロールバックを行うかどうかです。「オン」:ステートメントが失敗した場合、同一トランザクション内のすべての DML ステートメントがロールバックされます(DDL ステートメントはロールバックできません)。「オフ」:ステートメントは 1 つずつ実行され、いずれかが失敗した場合、トランザクションは停止しますが、すでに実行済みのステートメントはロールバックされません。 オフ データバックアップ バックアップスクリプトを生成するかどうかです。「オン」:DMS は、 INSERTスクリプトを生成して、UPDATEまたはDELETEステートメントによって影響を受ける行をバックアップします。「オフ」:バックアップスクリプトは生成されません。オン
進行状況のモニタリングおよびスキーマの検証
DMS 管理者として、基本情報 セクション内のデータベース名にポインターを合わせ、クエリ をクリックして SQL コンソールを開きます。
SQL コンソールで、以下のステートメントを実行してデータベース内のすべてのテーブルを一覧表示します。
ロックフリースキーマ変更の実行中は、結果に 2 つの一時テーブルが表示されます。
SHOW TABLES;トップナビゲーションバーで、O&M > タスク を選択します。
シンプルモードの場合、左上隅の
アイコンにポインターを合わせて、すべての機能 > O&M > タスク を選択します。タスク番号をクリックして、実行詳細 ダイアログを開きます。
操作 列の 進行状況 をクリックし、「ロックフリースキーマ変更」メッセージを表示して、ロックフリースキーマ変更のリアルタイム進行状況をモニターします。
タスクが完了したら、スキーマを検証します。
big_tableテーブルは新しいスキーマを使用するようになり、一時テーブルは削除されています。