DEFINER 句を含むメタデータを含む MySQL 移行ジョブを作成して実行する

概要

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

メタデータに存在する DEFINER 値を特定するには、MySQL ソース データベースをクエリします。結果で、root%localhost または移行先インスタンスに存在しないユーザーのエントリを確認します。

SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_SCHEMA NOT 
IN ('mysql', 'sys');
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA NOT 
IN ('mysql', 'sys');
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA NOT 
IN ('mysql', 'sys');
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA NOT 
IN ('mysql', 'sys');

このようなメタデータを含むソースから移行ジョブを実行するには、次のいずれかの操作を行います。

  • 移行ジョブを開始する前に、移行先の Cloud SQL レプリカ インスタンスにユーザーを作成します。

    1. 移行ジョブの下書きを作成して開始しない場合は、[作成して開始] ではなく [作成] を選択します。

    2. 移行先の Cloud SQL インスタンスで、Cloud SQL API または Google Cloud コンソールを使用して、移行元の MySQL インスタンスからユーザーを再作成します。

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

  • 移行ジョブを設定する前に、ソースの MySQL インスタンスで DEFINER 句を INVOKER に更新します。