更新时间:2023-11-06 gmt 08:00

如何将mycat数据整库迁移至ddm-凯发k8国际娱乐官网入口

操作场景

本章节主要介绍将mycat中的数据整库迁移到ddm中。

  • 迁移过程中可能会出现业务中断情况,中断时长与迁移数据量大小、网络情况相关。
  • 数据迁移是一项比较复杂的操作,建议在业务量较低时进行。本实践仅供参考,您需要根据自己业务场景、数据量、停机时间要求等情况,设计合适的迁移方案。
  • 由于ddm仅支持通过弹性云服务器(ecs)访问,因此需要先将数据库导出为文件到ecs,然后从ecs将文件中的数据导入到ddm。

迁移前准备

  • 准备可以访问mycat、目标ddm实例和目标ddm实例关联的rds实例的ecs。
    1. 确保mycat、目标ddm实例和目标ddm实例关联的rds实例都在同一个vpc下,保证网络互通。
    2. 部署mycat的ecs、目标ddm实例和目标ddm实例关联的rds实例的安全组建议配置相同,如果不同则需要放开对应端口访问。
    3. ecs已安装mysql官方客户端,mysql客户端版本建议为5.6或5.7。
      • redhat系列linux安装命令:yum install mysql mysql-devel
      • debian系列linux安装命令:apt install mysql-client-5.7 mysql-client-core-5.7
    1. ecs磁盘空间足够存放临时转储文件;ecs内存空间足够,可以用来比较转储文件。
  • 准备已关联rds实例的ddm实例,并配置ddm帐号、ddm逻辑库等相关信息。
  • 本章节以mycat 1.6版本进行迁移为例。

迁移策略

mycat与ddm数据表类型不同,迁移策略也有所差异,详情如表1所示。

表1 迁移策略

mycat表类型

ddm表类型

迁移策略

非拆分表

单表

  1. mycat导出表结构表数据
  2. 连接目标ddm关联的rds将数据导入至目标ddm(非拆分表场景)

拆分表:分片规则为hash类(含年月日等日期类)

拆分表:拆分算法为hash(含日期函数)

  1. mycat导出全部数据表结构。
  2. 对照导出的表结构,在ddm控制台创建表结构完全相同的表。
  3. 从mycat整库导出数据
  4. 连接ddm导入整库数据

拆分表:分片规则为按范围range类(含年月日等日期类)

拆分表:拆分算法为range(含日期函数)

广播表

广播表

约束限制

  • 为了保持数据完整性,需要先停止mycat业务后再进行数据迁移。
  • 该场景不支持通过ddm关联mycat关联的rds进行数据关联,需要将mycat数据导出后再导入到ddm完成数据迁移。
  • 目标ddm关联的rds版本与mycat关联数据库的版本需要保持一致。

从mycat导出数据表结构

  1. 登录ecs。
  2. 执行如下命令导出mycat数据中的表结构数据,其中斜体变量参数需根据实际情况配置,详细参数说明如表2所示。
    mysqldump -h {db_address} -p {db_port} -u {db_user} -p   --skip-lock-tables --add-locks=false --set-gtid-purged=off --no-data --order-by-primary {db_name} > {mysql_schema.sql}
    enter password: **********
    表2 参数解释

    参数

    说明

    备注

    db_address

    待导出数据的数据库连接地址。

    必填

    db_port

    数据库侦听端口

    必填

    db_user

    数据库用户

    必填

    db_name

    数据库名称

    必填

    mysql_schema.sql

    生成的表结构文件名。

    每次导出表结构时文件名不同。

    建议以“逻辑库名” “_” “schema”格式命名,以免数据被覆盖。如mysql_schema.sql。

    mysql_data.sql

    生成的整库数据文件名。

    -

从mycat整库导出数据

  1. 登录ecs。
  2. 执行如下命令导出mycat整库数据,其中斜体变量参数需根据实际情况配置,详细参数说明如表2所示。
    mysqldump -h {db_address} -p {db_port} -u {db_user} -p   --hex-blob --complete-insert --skip-lock-tables --add-locks=false --set-gtid-purged=off --quick --no-create-info --order-by-primary {db_name} > {mysql_data.sql}
    enter password: **********
  3. 导出完成后,在ecs上执行如下命令可查看导出的.sql文件。
    ls -l

将数据导入至目标ddm(非拆分表场景)

在ecs上采用mysql客户端直连目标ddm关联的rds,直接执行以下命令导入表结构文本文件和数据文件。

如果是单表或普通表,
mysql -f -h {rds_address} -p {rds_port} -u {rds_user} -p {db_name} < {mysql_table_schema.sql}
enter password: **********
mysql -f -h {rds_address} -p {rds_port} -u {rds_user} -p {db_name} < {mysq_table_data.sql}
enter password: **********
  • rds_address为待导入数据的rds的地址。
  • rds_port为rds实例的端口
  • rds_user为rds实例的用户名。
  • db_name为rds数据库名称,如果导入的是单表,db_name为rds第一个分片的物理数据库。
  • mysql_table_schema.sql为待导入的表结构文件名。
  • mysq_table_data.sql为待导入的表数据文件名。

将数据导入至目标ddm(拆分表、广播表场景)

在ecs上采用mysql客户端连接ddm执行如下命令,将整库数据文件导入ddm。
mysql -f -h {ddm_address} -p {ddm_port} -u {ddm_user} -p {db_name} < {mysql_data.sql}
enter password: **********
表3 参数解释

参数

说明

备注

ddm_address

待导入数据的ddm实例连接地址。

可在ddm管理控制台上,实例基本信息页面查看“连接地址”和“端口”。

ddm_port

待导入数据的ddm侦听端口。

ddm_user

访问ddm的用户。

创建ddm逻辑库时使用的帐号,需具备读写权限。

db_name

待导入数据的ddm逻辑库名称。

-

mysql_data.sql

待导入整库数据文件的名称。

即导出数据中2导出的文件名称。

分享:
网站地图