记:生产环境 Mysql 数据库数据迁移

一、场景:

        数据中台基于hadoop构建了ODS,DWD,DIM,DWS,ADS五层数仓模型,有实时任务和离线任务。数据类型包括结构化数据、非结构化数据,最后形成的ADS层指标数据写入mysql指标数据库,由于业务原因需要将mysql进行迁移,以下涉及的迁移是指涉及指标数据库mysql的迁移。

二、前提条件

确保数据中台集群与新mysql 的连通性:

telnet 数据库IP  3306

三、具体步骤

1. 批量工具同步库表结构及其历史数据

        选择时间进行历史数据迁移(如2023-12-10 12:00:00 A时点

1.1 旧数据库所有表结构及历史数据导出:

mysqldump -h 旧数据库IP  -u用户名 -p密码 -A  >  /data/all.sql (导出路径)

1.2 all.sql复制到新数据库所在服务器中,在新数据库执行:

source /路径/all.sql

2. MySQL在中台的相关任务迁移(B时点

2.1 离线任务

        修改ADS层每个任务的输出配置为新mysql的新表,若为统一配置,只需修改一次配置即可,更新任务。

        注意:任务迁移完成后需手动执行一次观察效果,查看数据是否写入到新表中,测试完成为避免数据重复需将表清空

2.2 实时任务

场景:kafka集群需换成另一个kafka集群,IP 地址有变化

任务链路:kafka->写入mysql

  1. 先在目标mysql创建对应表(第一步已完成则无需手动再创建)
  2. 在新kafka集群创建相同名称的topic,并测试写入数据是否正常
  3. 修改实时任务配置的kafka IP地址,并联合2测试改实时任务是否正常写入新mysql表
  4. 确认无误将mysql中测试数据删除即可,实时任务无需变更

注意:需要通知原kafka集群的所有生产者和消费者更改kafka IP配置

3. A-B时间段内任务新增数据手动迁移

3.1 对于离线任务

        只要当天完成则无新增数据,无需处理。若确实有新增数据,手动执行离线任务即可。

3.2 对于实时任务

        可以根据数据入库时间(需要表中有该字段)过滤出新数据,同步至新数据库。

3.3 如有需要,批量手动同步某表任务(数据量较大时)

        以下命令场景是我将历史数据写入到新数据库中的临时表中,而实时任务写入的mysql表已经更改为正式表,由于此表数据量较大,使用load data命令将临时表的历史数据批量同步至正式表,虽然两张表都在新数据库,可以使用insert select 命令导入,但由于数据量较大,执行效率低,容易超时失败,所以使用load命令更高效。

        注意:使用这个命令要确保导入导出的文件在secure-file-priv 变量指定的路径下,否则会报错。使用以下命令查看此安全路径。

show variables like '%secure%'; 

a 导出临时表数据

select json_text,collected_time,collected_date -- 插入指定字段,全选可以写*

from 临时表 

into outfile '/var/lib/mysql-files/new.csv'

fields terminated by ','

optionally enclosed by '"'

lines terminated by '\r\n';

b 导入到正式表

load data infile '/var/lib/mysql-files/new.csv'

into table 正式表

fields terminated by ','

optionally enclosed by '"'

lines terminated by '\r\n'

(json_text,collected_time,collected_date); -- 插入指定字段,全选可以不写这一行

执行效率可看下图:

近19万条数据,数据大小24G,导出用时接近6min,导入正式表用时52min。

  • 40
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值