更新时间:2025-07-07 GMT+08:00

使用DRS迁移多租户数据

操作场景

开启多租户管理与资源隔离功能后,DRS迁移可以迁移所有租户下的数据。

使用须知

  • 若源实例和目标实例多租开关状态不一致,会预检查失败。
  • 源实例和目标实例的版本或规格不一致时,迁移成功后,源实例的资源配置不再适用目标实例。建议用户按照目标实例的规格,使用资源配置语法重新调整目标实例租户的资源配置。
  • DRS灾备同步场景,不支持使用目标实例IP+端口场景进行迁移。如果选择IP+端口模式,租户元数据将无法迁移到目标实例上。
  • 推荐源端和目标端均为2.0.60.241200版本及其以上使用DRS迁移功能,其他版本无法保证多租功能正常提供服务。
  • 若源实例和目标实例多租开关打开,由于多租元数据表中存在初始化配置,会在预检查阶段上报提醒,告知用户__taurus_sys__库下存在非空表。用户可根据实际情况清理该库下非空表的内容。如果不清理,则会在DRS灾备同步过程中保留非空表中的数据,可能会造成多租功能无法使用。具体清理步骤请参考常见问题

迁移方案

  • TaurusDB实例内核版本2.0.60.241200之前,DRS不会同步租户相关元数据,故租户信息不会被同步到目标端。如果需要迁移某个租户到另一个实例,需要遵循以下步骤:
    1. 目标端需要使用具备多租特性的实例,首先在目标端手动创建租户。
    2. 使用DRS数据同步功能创建库级同步任务(如果源端和目标端租户名有改动,则这里需要改动目标端库名)。

    3. 进行同步。
  • TaurusDB实例内核版本2.0.60.241200及以上,DRS迁移支持租户元数据跨实例迁移,可直接使用DRS数据同步功能创建库级同步任务后进行迁移。

常见问题

如何清理__taurus_sys__库下非空表数据?

  1. 清理普通租户下的用户,数据库以及表空间。示例如下:

    • 执行SQL语句,查询普通租户下是否仍有用户存在。
      select user,host from mysql.user where instr(user, '@') > 0
      存在用户,执行SQL语句,删除对应用户。
      drop user 'user_name@tenant_name'@'%'
    • 执行SQL语句,查询普通租户下是否仍有数据库存在。
      select * from SCHEMATA where instr(SCHEMA_NAME, '@') > 0

      如果存在普通租户下的数据库,执行SQL语句,删除对应数据库。

      drop user 'db_name@tenant_name'@'%'
    • 执行SQL语句,查询普通租户下有哪些存量数据库。
      select * from information_schema.MT_tenant_DB

      执行SQL语句,将存量数据库回收到系统租户下。

      alter database 'db_name' tenant = ``
    • 执行SQL语句,查询普通租户创建的表空间。
      select * from information_schema.innodb_tablespaces where instr(NAME, '@') > 0

      执行SQL语句,删除对应的表空间。

      drop tablespace tbs_name

  2. 删除普通租户(用户级资源配置会自动删除),删除对应的租户级资源配置。示例如下:

    drop tenant tenant_name;
    drop resource_config config_name;

  3. 删除系统租户下的用户级资源配置。示例如下:

    CALL dbms_resource_manager.clear_all_configs();