gbase迁移mysql_基于datax实现从gbase到mysql的数据迁移--时间字段篇

项目背景

前期已经写过几篇用datax实现异构数据迁移的文章,面对复杂的上游数据,无法用一种通用的方式来实现所有业务表的迁移,比如一个大业务表中rowid字段与表记录差异特别大(一个表有3亿条记录,里面的最大rowid为30亿),这种情况下通过rowid切片也能实现迁移,但切片后的数据分布不均匀,这时基于时间字段来迁移则要顺利得多。

系统环境

gbase8a 16节点集群

mysql5.6.46主从

迁移策略

迁移数据有几种方式,需要根据实际的情况来决定采用哪一钟,面对复杂的业务数据,很难有标准的方式来实现所有业务数据的迁移,现把我遇到的迁移策略整理如下:

1、对于小表(百万级)进行批量迁移

2、大表无时间字段(千万以及亿级),通过rowid字段切片

3、大表有时间字段,但rowid比表记录大几倍甚至几十倍的情况 ,基于时间字段切片迁移

通过几上三种方式组合,完美的解决了目前项目遇到的数据迁移问题

实现脚本

datax配置文件

{

"job": {

"setting": {

"speed": {

"byte": 1048576

},

"errorLimit": {

"record": 0,

"percentage": 0.02

}

},

"content": [

{

"reader": {

"name": "$source_reader",

"parameter": {

"username": "$source_db_user",

"password": "$source_db_pwd",

"connection": [

{

"querySql": [

"select * from $source_table_name where $date_column>='$start_time' and $date_column

],

"jdbcUrl": [

"$source_db_conn"

]

}

],

"fetchSize": 1024

}

},

"writer": {

"name": "$target_reader",

"parameter": {

"username": "$target_db_user",

"password": "$target_db_pwd",

"session": [],

"preSql": [],

"column": ["REC_ID","PRO_ORG_NO","TG_ID","ORG_NO","TG_NO","TG_NAME","STAT_DATE","CONS_NUM","TG_CAP","PPQ","UPQ","LOSS_PQ","LINELOSS_RATE","ABNORMAL_LL_TYPE","METER_SUM","METER_COVER_SUM","COVER_RATE","IS_COVER","METER_SUCC_SUM","SUCC_RATE","IS_MONITOR","COLL_TYPE","IS_CALC","EVAL_TYPE","BUF_UPDATETIME","PUBLIC_MET_CNT","LOW_MET_CNT","DISTRIBUTED_MET_CNT","RESP_EMP_NO"],

"connection": [

{

"table": [

"$target_table_name"

],

"jdbcUrl": "$target_db_conn"

}

]

}

}

}

]

}

}

迁移脚本文件/data/datax/job/gbasetomysql.json

#!/bin/bash

#function:

#version:0.3

#author:lineqi

#crt_time:2020-04-26

#大表同步思路

#1、从gbase8a数据库里获取大表的名称和时间字段,按天生成同步记录,存储在table_name.txt文件中,格式为buf_aa.t_xx_pb_aayjl:in_xx_gbase_aa.t_xx_pb_aayjl:fssj:2020-06-01:2020-06-02,该步骤先通过手动实现,可以一天、两天,甚至一周为单位进行切分

#2、循环读取table_name.txt中的内容

#3、以天为单位抽取数据

#datax命令调用案例

#eg:/opt/datax/bin/datax.py -p "-Dsource_reader=${v_gbase_reader}" /opt/datax/job/mysqltest.json >> /opt/datax/log/table_name_2020-04-26.log

#定义文件与命令执行路径

v_table_list='/data/datax/job/table_name.txt'

v_exec_command='/data/datax/bin/datax.py'

v_path_json='/data/datax/job/gbasetomysql.json'

v_path_log='/data/datax/log/'

#定义常用参数

v_source_table_name=''

v_target_table_name=''

v_sync_start_time=`date -d "today" +"%Y-%m-%d-%H-%M-%S"`

v_start_time=''

v_end_time=''

v_append_time=" 00:00:00"

v_date_column=''

#定义源数据库的连接方式

v_gbase_user='qyw_qjqx'

v_gbase_pwd='qyw12_19QJQX#'

v_gbase_conn='jdbc:gbase://10.xx.xx.28:15258/xx_amr'

v_gbase_reader='rdbmsreader'

#定义目标数据库的连接方式

v_mysql_user='qjqx'

v_mysql_pwd='Whayer1234'

v_mysql_reader='mysqlwriter'

v_mysql_conn='jdbc:mysql://25.xx.xx.68:13306/xx_gbase8a_xx_amr'

#从table_name.txt获取表名、表记录数并计算分片

for table_name in `cat $v_table_list`

do

#get table_name

v_source_table_name=`echo $table_name|awk -F ":" '{print $1}'`

v_target_table_name=`echo $table_name|awk -F ":" '{print $2}'`

v_date_column=`echo $table_name|awk -F ":" '{print $3}'`

v_start_time=`echo $table_name|awk -F ":" '{print $4}'`"$v_append_time"

v_end_time=`echo $table_name|awk -F ":" '{print $5}'`"$v_append_time"

$v_exec_command -p "\

-Dsource_reader=${v_gbase_reader} \

-Dsource_db_user=${v_gbase_user} \

-Dsource_db_pwd=${v_gbase_pwd} \

-Dsource_db_conn=${v_gbase_conn} \

-Dsource_table_name=${v_source_table_name} \

-Ddate_column=${v_date_column} \

-Dstart_time='${v_start_time}' \

-Dend_time='${v_end_time}' \

-Dtarget_reader=${v_mysql_reader} \

-Dtarget_db_user=${v_mysql_user} \

-Dtarget_db_pwd=${v_mysql_pwd} \

-Dtarget_db_conn=${v_mysql_conn} \

-Dtarget_table_name=${v_target_table_name} \

" $v_path_json >>"$v_path_log"$v_source_table_name"$v_sync_start_time".log 2>&1

# echo $v_table_name,$v_start_num,$v_end_num

done

表配置文件table_name.txt

buf_aa.t_xx_pb_aayjl:in_xx_gbase_aa.t_xx_pb_aayjl:fssj:2020-06-03:2020-06-04

buf_aa.t_xx_pb_aayjl:in_xx_gbase_aa.t_xx_pb_aayjl:fssj:2020-06-02:2020-06-03

buf_aa.t_xx_pb_aayjl:in_xx_gbase_aa.t_xx_pb_aayjl:fssj:2020-06-01:2020-06-02

说明:表配置文件中的第一行由7个部分组成,分别代表的含义如下

buf_aa:代表源库的数据库名或schema名

t_xx_pb_aayjl:代表源库的业务表名与目标下的业务表名一致

in_xx_gbase_aa:目标库数据库名或schema名

fssj:源库业务表中的时间字段

2020-06-01:源库业务表同步的起始时间

2020-06-02:源库业务表同步的结束时间

总结:

1、不管是基于时间切分、rowid切分、小表批量迁移,只要一次处理的数据不超过datax的遇到内存即可

2、表配置文件table_name.txt文件的时间没有带时、分、秒,这里是在shell脚本定义变量来实现的

3、当时基于时间切分迁移数据时,表配置文件table_name.txt里有500多条记录,当运行到400多条记录时,datax运行出问题了,将已经同步完成的400多条记录从table_name.txt清除后,继续则没有出现问题,有点奇怪。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果WWDC前瞻之iOS 13更新最受关注;微软发布基于区块链的去中心化身份识别系统;小米成立了新集团质量办公室……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go SpaceX猎鹰9号火箭发射&…

企业级实战03_真实项目实战SpringMVC整合ActiveMQ

创建2个工程&#xff0c;生产者和消费者 测试点对点和广播发送常见类型的消息例如&#xff1a;文本(String)、对象(Object) 文本转Long String text “123”; Long.parseLong(text) 数组转集合 Arrays.toArray(list) 引入依赖 <?xml version"1.0" enco…

新一代私有云来了!看透基于开源生态的产品化

戳蓝字“CSDN云计算”关注我们哦&#xff01;文 | 易捷行云&#xff08;EasyStack&#xff09;创始人 陈喜伦来源 | 开源云中文社区进入云计算大时代&#xff0c;中大客户和产业互联网化是云计算的主战场&#xff0c;获取企业级客户是主旋律。对企业级客户来说以新一代私有云为…

mysql 用户管理表_mysql用户管理

msyql用户定义&#xff1a;使用某个用户 从哪个(些)地址访问我的数据库主机范围单独IP&#xff1a;10.0.0.200一个网段:10.0.0.% --->10.0.0.1-->10.0.0.254一个地址范围&#xff1a;10.0.0.5% ---->50-59用户的功能&#xff1a;1、用来登录mysql数据库2、用来管理数据…

如何写一个bat批处理自动上传文件到FTP

文章目录单个文件&#xff1a;echo off echo open 192.168.1.143 >ftp.up echo ftp>>ftp.up echo "">> ftp.up echo cd pub >> ftp.up Echo binary>>ftp.up Echo put D:\softinfo.xml >> ftp.up Echo bye>>ftp.up FTP -s:ftp…

8月有望推出5G套餐,资费或低于4G价格;为专利技术,华为5000万美元收购技术公司;AMD和三星宣布合作……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 宝宝树孕育APP新增即时交互功…

从数组随机抽取5个不重复_Power Query 如何保证随机抽取元素不重复

继续昨天的话题&#xff0c;昨天我们实现完全的随抽取列表元素&#xff0c;有一个问题就是可能几次会抽取同一个位置的元素&#xff1a;1-50中随机抽取5个数值&#xff0c;点击刷新&#xff0c;就会出现不同的结果&#xff0c;如上图可能会出现两个相同的数值&#xff0c;如何确…

vba上传指定文件ftp服务器

文章目录一、需求分析&#xff1a;二、操作流程&#xff1a;2.1 【开发工具】-【宏】2.2 【宏】-【编辑】2.3 【把脚本复制进去】2.4 脚本如下2.5 修改位置2.5.1 修改sheet名称和表格一致2.5.2 修改Cells(2,3)2.5.3 修改4 to 1002.5.4 修改Cells(i,3)2.5.5 修改发ftp信息2.5.6 …

云存储精华问答 | 云存储是如何工作的?

云存储是一种网上在线存储&#xff08;英语&#xff1a;Cloud storage&#xff09;的模式&#xff0c;即把数据存放在通常由第三方托管的多台虚拟服务器&#xff0c;而非专属的服务器上。今天就让我们来看看关于云陈存储的精华问答吧。1Q&#xff1a;云存储是如何分类的&#x…

mysql如何实现管理权限分离_基于SpringCloud+vue(ElementUI)+mySQL前后端分离设计之--搭建权限管理系统...

权限图&#xff1a;pom.xmlxsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0com.serverauthority0.0.1-SNAPSHOTjarauthorityauthority project for Spring Bootorg.springframework.bootspring-boot-s…

刚刚,Python内幕被爆出!老码农:没控制住,心态已崩!

作为一名老码农&#xff0c;我的心这次凉透了&#xff01;事情起因很简单&#xff1a;前天我晚上正在全国最大的同性组织某Hub上浏览时候&#xff0c;发现这样的一条信息&#xff1a;Python 116K 超过 C、JS, 薪酬排行第一&#xff08;最大招聘网站Indeed.com数据&#xff09;噗…

mysql数据库连接不稳定_连接 MySQL 数据库失败频繁的原因探秘

连接mySQL数据库失败频繁&#xff0c;主要是什么原因造成的? 一年前&#xff0c;我开发了一个网站&#xff0c;租用的是linux下PHPmySQL的虚拟空间&#xff0c;之前一直工作正常。近半年来&#xff0c;却频繁出现连接数据库失败错误(一周1~2次)&#xff0c;需要找空间商重启my…

mysql表空间界限_MySQL5.7 import表结构报错超出表空间界限

事后测试了一下&#xff0c;一下方法就是垃圾&#xff0c;看看可以&#xff0c;别跟着学&#xff01;&#xff01;&#xff01;数据库重启后&#xff0c;问题依然暴露出来了&#xff0c;参数什么的都是扯&#xff0c;擦记录一个困扰我好几天的问题。先贴上报错&#xff1a;spac…

vba上传文件到ftp服务器指定目录下面

vba上传文件到ftp服务器指定目录 脚本形式 文章目录1. 测试版本无校验&#xff1a;2. 测试版本有检验3. 文件不存在校验版本4. 文件不存在校验必填项校验版本1. 测试版本无校验&#xff1a; Sub 按钮1_Click() Dim i, str1, str2, str3, str4, str5, str6, str7, str8, str9, s…

mysql获取用户权限api_AnalyticDB MySQL服务关联角色

AliyunServiceRoleForAnalyticDBForMySQL介绍角色名称&#xff1a;AliyunServiceRoleForAnalyticDBForMySQL角色权限策略&#xff1a;AliyunServiceRolePolicyForAnalyticDBForMySQL权限说明&#xff1a;{"Version": "1","Statement": [{"A…

分布式存储首选,浪潮商用机器FP5466G2服务器测评分析

戳蓝字“CSDN云计算”关注我们哦&#xff01;如今随着信息时代的到来&#xff0c;以云计算、大数据、人工智能为代表的新晋技术与应用实现了爆发式的增长&#xff0c;随之而来促生了原本存在于各个行业的大量业务应用中PB级&#xff0c;甚至EB级的海量版数据信息&#xff0c;这…

centos7常用工具安装手册

centos7常用工具安装手册 文章目录1. CentOS 7安装 ifconfig2. CentOS 7 上安装vim3. centos7 安装wget4. CentOS7下zip解压和unzip压缩文件5. CentOS 安装rz和sz命令 lrzsz5.1. 首先安装lrzsz5.2. 上传文件&#xff0c;执行命令rz&#xff0c;会跳出文件选择窗口&#xff0c;选…

pipelines mysql_Scrapy爬取豆瓣图书数据并写入MySQL

介绍本篇涉及的内容主要是获取分类下的所有图书数据&#xff0c;并写入MySQL准备Python3.6、Scrapy、Twisted、MySQLdb等演示代码一、创建项目scrapy startproject BookSpider #创建项目scrapy genspider douban book.douban.com #创建豆瓣爬虫二、创建测试类(main.py)from scr…

java 中的原始类型与原始封装类型

Java 提供两种不同的类型&#xff1a;引用类型和原始类型&#xff08;或内置类型&#xff09; 文章目录一、原始与对应的封装类二、引用类型和原始类型的区别:三、总结:比如: Int是java的原始数据类型&#xff0c;Integer是java为int提供的封装类。 一、原始与对应的封装类 J…