迁移数据库账号

数据传输服务DTS(Data Transmission Service)支持迁移源库账号的功能。针对需要迁移数据库账号的场景,您可以在配置同步或迁移任务过程中启用账号迁移功能,帮助您方便快捷地将源库的账号(包含密码和权限)迁移至目标库。

背景信息

在您将源库的数据同步或迁移到目标库后,源库中的账号往往需要手动在目标库中创建和授权。手动在目标库创建账号需要有相关数据库的专业知识、耗费时间较多、容易遗漏等缺点,可能会导致业务受阻。

前提条件

  • 配置任务使用的源和目标库账号满足要求,具体要求请参见数据库账号所需权限

  • 使用DTS同步或迁移数据的库表结构。即在配置任务对象及高级配置阶段中,同步类型勾选了库表结构同步或者迁移类型勾选了库表结构迁移

注意事项

  • 当前仅MySQL实例间的同步或迁移、MySQL实例同步或迁移到PolarDB MySQL版集群、PolarDB MySQL版集群间的同步或迁移实例,支持将源库的账号迁移至目标库。

    说明
    • MySQL实例含RDS MySQL和自建MySQL。

    • 目标RDS MySQL实例为5.6版本时,不支持迁移账号。

    • 暂不支持MySQL 8.0的动态权限迁移。

    • 不支持迁移ALL PRIVILEGES权限。

  • 系统账号(如root、mysql.infoschema、mysql.session、mysql.sys等)和内置账号不支持迁移至目标库。若您勾选了系统账号或内置账号,则会导致DTS实例报错Access denied for user 'XXXX'

  • 目标库中已存在的账号不支持迁移。如果重启任务或者存在多个任务导致目标库已存在待迁移的账号,在实例结构迁移模块的User_Privilege页签会显示账号已迁移成功,且在相应的创建语法中会有注释user already exists

  • 未经授权的账号不支持迁移。

  • 迁移账号时不支持重置账号密码。

  • 若迁移的账号为高权限账号,迁移至目标库后将会变为无授权数据库的普通账号。

数据库账号所需权限

若您需要迁移源数据库中的账号,则配置任务过程中使用的数据库账号有如下要求(高权限账号满足要求):

账号

权限

授权方式

源数据库账号

元数据表mysql.user、mysql.db、mysql.columns_priv、mysql.tables_priv的SELECT权限。

使用高权限账号,分别在源库和目标库中执行如下命令进行授权:

源库

grant SELECT on mysql.user to user@'%';
grant SELECT on mysql.db to user@'%';
grant SELECT on mysql.columns_priv to user@'%';
grant SELECT on mysql.tables_priv to user@'%';

目标库

grant SELECT on mysql.user to user@'%';
grant CREATE USER on *.* to user@'%';
grant GRANT OPTION on *.* to user@'%';
说明

命令中的user需要替换为任务中使用的账号。

目标数据库账号

CREATE USER权限、GRANT OPTION权限和元数据表mysql.user的SELECT权限

操作步骤

  1. 高级配置阶段将是否迁移账号选择为

  2. 根据需求选择需要迁移的账号。

    说明

    待迁移账号的格式为<username>@<host>,您可以根据实际情况修改<host>以指定该账号允许登录的主机。

  3. 根据提示完成后续操作。更多信息,请参见同步方案概览迁移方案概览中的相关配置文档。

常见问题

  • 为什么无法选中账号?

    可能是该账号为系统账号,或者目标库中已存在同名的账号。

  • 为什么账号名称列表中没有账号?

    可能是由于任务中配置的账号权限不足,您需要确保源库和目标库的账号均满足要求。