建立並執行含有 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');

如要從包含這類中繼資料的來源執行遷移工作,請採取下列任一做法:

  1. 在開始遷移工作前,請先在目的地 Cloud SQL 副本執行個體建立使用者。

    1. 如要建立遷移工作草稿但不啟動,請選取「建立」,而非「建立並啟動」。

    2. 在目的地 Cloud SQL 執行個體上,使用 Cloud SQL API 或 Google Cloud 控制台,重新建立來源 MySQL 執行個體中的使用者。

    3. 從遷移工作清單或特定工作頁面啟動遷移工作。

  2. 設定遷移工作前,請先將 MySQL 來源執行個體中的 DEFINER 子句更新為 INVOKER。