建立並執行含有 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 API 或 UI,在目的地 Cloud SQL 執行個體上建立來源 MySQL 執行個體的使用者。

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

  • 在設定遷移工作之前,請先在來源 MySQL 執行個體上將 DEFINER 子句更新為 INVOKER