Google Cloud

ギャップをなくす: Database Migration Service を使用して、漏れのない移行を行う

※この投稿は米国時間 2020 年 11 月 24 日に、Google Cloud blog に投稿されたものの抄訳です。


Database Migration Service(DMS)は、MySQL(プレビュー版)および PostgreSQL(希望者にプレビュー版を提供)のワークロードを Cloud SQL に移行するサービスで、ダウンタイムを最小に抑えながらこれらのワークロードを忠実に移行するために役立ちます。DMS はサーバーレスのため、移行のためのリソースをプロビジョニング、管理、モニタリングする必要がありません。

この記事では、MySQL のデータベース移行の対象となるものとならないものを区別しながら、DMS を使って移行を漏れなく行うための手順を説明します。移行元データベースのデータ、スキーマ、その他のデータベース機能(トリガーやストアド プロシージャなど)は、高い信頼性を保ち、大規模かつ自動的に移行先の Cloud SQL データベースに複製されます。ただし、MySQL の構造上、移行されないものもあります。では、DMS で移行されるものと移行されないものについて、詳しく見ていきましょう。

MySQL データベース移行の対象

MySQL 向けの DMS では、MySQL データベース独自のネイティブなレプリケーション技術を使用して、データベース オブジェクトを特定のデータベースから他のデータベースに忠実に移行します。移行対象については、ドキュメントの移行の忠実性の節で詳しく説明しています。このプレビュー版のリリースの時点では、データベースの移行時に、以下のデータ、スキーマ、メタデータ コンポーネントがすべて移行されます。

データの移行 

すべてのデータベースおよびスキーマのテーブルが移行されますが、次のデフォルトのデータベースとスキーマは対象外となります: sys、mysql、performance_schema、information_schema。

スキーマの移行

  • 命名

  • 主キー

  • データ型

  • 順序位置

  • デフォルト値

  • null 値許容

  • 自動増分属性

  • セカンダリ インデックス

メタデータの移行

  • ストアド プロシージャ

  • 関数

  • トリガー

  • ビュー

  • 外部キー制約

データベース移行の対象外

MySQL

MySQL データベース移行時に移行対象とならないものや、注意すべき既知の制限および割り当てがあります。

ユーザー定義

MySQL システム データベースとそれに含まれるユーザーおよび権限の情報は、移行の対象外となります。そのため、ユーザー アカウントおよびログイン情報は、移行先の Cloud SQL インスタンスで直接管理する必要があります。

インスタンスを使用する前に、ルート アカウントを設定する必要があります。移行先の Cloud SQL インスタンスにユーザーを追加するには、UI の [ユーザー] タブか、MySQL クライアントを使用します。MySQL ユーザー アカウントの管理方法については、Cloud SQL のドキュメントで詳しく説明しています。

Definer 句の使用

MySQL の移行ジョブでは、ユーザーデータは移行されません。そのため、ユーザーが DEFINER句を使って定義したメタデータを含むソースを新しい Cloud SQL レプリカで呼び出すと、そのユーザーがまだ存在しないため、エラーとなります。

DEFINER 句を含むソースから移行を実行するには、以下の手順に従います。

1.移行ジョブを作成します。ただし、開始はしないでください([Create & Start] ではなく [Create] を選択します)。

2.移行先の新しい Cloud SQL インスタンスに、Cloud SQL API または UI の [ユーザー] タブを使ってユーザーを作成します。

3.移行ジョブリストか、ジョブのページから移行ジョブを開始します。

または、移行ジョブを設定する前に、ソースの DEFINER 句を INVOKER に変更することもできます。メタデータが ’root’@’localhost’ によって作成されている場合、処理エラーが発生しますのでご注意ください。移行ジョブの開始前に、DEFINER を変更してください。

DMS の次のステップ

MySQL または PostgreSQL データベースの Cloud SQL への移行について詳しくは、以下のリソースをご覧ください。


-Cloud デベロッパー アドボケイト Jan Kleinert