如何将mycat数据整库迁移至ddm-凯发k8国际娱乐官网入口
操作场景
本章节主要介绍将mycat中的数据整库迁移到ddm中。
- 迁移过程中可能会出现业务中断情况,中断时长与迁移数据量大小、网络情况相关。
- 数据迁移是一项比较复杂的操作,建议在业务量较低时进行。本实践仅供参考,您需要根据自己业务场景、数据量、停机时间要求等情况,设计合适的迁移方案。
- 由于ddm仅支持通过弹性云服务器(ecs)访问,因此需要先将数据库导出为文件到ecs,然后从ecs将文件中的数据导入到ddm。
迁移前准备
- 准备可以访问mycat、目标ddm实例和目标ddm实例关联的rds实例的ecs。
- 确保mycat、目标ddm实例和目标ddm实例关联的rds实例都在同一个vpc下,保证网络互通。
- 部署mycat的ecs、目标ddm实例和目标ddm实例关联的rds实例的安全组建议配置相同,如果不同则需要放开对应端口访问。
- 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
- ecs磁盘空间足够存放临时转储文件;ecs内存空间足够,可以用来比较转储文件。
- 准备已关联rds实例的ddm实例,并配置ddm帐号、ddm逻辑库等相关信息。
- 本章节以mycat 1.6版本进行迁移为例。
迁移策略
mycat与ddm数据表类型不同,迁移策略也有所差异,详情如表1所示。
mycat表类型 |
ddm表类型 |
迁移策略 |
---|---|---|
非拆分表 |
单表 |
|
拆分表:分片规则为hash类(含年月日等日期类) |
拆分表:拆分算法为hash(含日期函数) |
|
拆分表:分片规则为按范围range类(含年月日等日期类) |
拆分表:拆分算法为range(含日期函数) |
|
广播表 |
广播表 |
约束限制
- 为了保持数据完整性,需要先停止mycat业务后再进行数据迁移。
- 该场景不支持通过ddm关联mycat关联的rds进行数据关联,需要将mycat数据导出后再导入到ddm完成数据迁移。
- 目标ddm关联的rds版本与mycat关联数据库的版本需要保持一致。
从mycat导出数据表结构
- 登录ecs。
- 执行如下命令导出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整库导出数据
- 登录ecs。
- 执行如下命令导出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: **********
- 导出完成后,在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(拆分表、广播表场景)
mysql -f -h {ddm_address} -p {ddm_port} -u {ddm_user} -p {db_name} < {mysql_data.sql} enter password: **********
参数 |
说明 |
备注 |
---|---|---|
ddm_address |
待导入数据的ddm实例连接地址。 |
可在ddm管理控制台上,实例基本信息页面查看“连接地址”和“端口”。 |
ddm_port |
待导入数据的ddm侦听端口。 |
|
ddm_user |
访问ddm的用户。 |
创建ddm逻辑库时使用的帐号,需具备读写权限。 |
db_name |
待导入数据的ddm逻辑库名称。 |
- |
mysql_data.sql |
待导入整库数据文件的名称。 |
即导出数据中2导出的文件名称。 |
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨