创建并运行包含带有 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。