datax从gbase8a同步上亿大表到mysql5.7中
背景
需要从gbase8a同步一些大表到mysql5.7数据库中,gbase8a中的大表基本上是没有有效的时间戳标识,直接通过datax抽取时,会报gc错误,除非设置同步使用的内存大于表的大小,这个在生产环境是不太现实的,目前想到的方式有两种,一是通过limit进行分页,二是通过rowid切片(这里得给gbase8a点个赞,好的设计,解决了后面基于rowid增量同步的问题)
系统环境:
[root@test-161 libs]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
gbase> select version();
±------------------------+
| version() |
±------------------------+
| 8.6.2.43-R7-free.110605 |
mysql> select version();
±-----------+
| version() |
±-----------+
| 5.7.29-log |
±-----------+
1 row in set (0.00 sec)
下面通过rowid切片方式来实现
#!/bin/bash
#function:
#version:0.3
#author:lineqi
#crt_time:2020-04-26
#大表同步思路
#1、从gbase8a数据库里获取大表的名称和数据记录数,存储在table_name.txt文件中,格式为表名:表的记录数,该步骤先通过手动实现
#2、循环读取table_name.txt中的内容
#3、根据每个表的记录数进行rowid切片,每个分片的数据量默认为20万条记录
#4、对每个表按分片的记录数进行数据抽取
#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=’/opt/datax/job/table_name.txt’
v_exec_command=’/opt/datax/bin/datax.py’
v_path_json=’/opt/datax/job/gbasetomysql57.json’
v_path_log=’/opt/datax/log/’
#定义常用参数
let v_split_num=200000
let v_start_num=0
let v_end_num=0
v_table_name=’’
v_sync_start_time=date -d "today" +"%Y-%m-%d %H:%M:%S"
#定义源数据库的连接方式
v_gbase_user=‘test’
v_gbase_pwd=‘test’
v_gbase_conn=‘jdbc:gbase://192.168.40.164:5258/test’
v_gbase_reader=‘rdbmsreader’
#定义目标数据库的连接方式
v_mysql_user=‘admin2020’
v_mysql_pwd=‘admin2020’
v_mysql_reader=‘mysqlwriter’
v_mysql_conn=‘jdbc:mysql://192.168.40.164:3308/wbi2020’
#从table_name.txt获取表名、表记录数并计算分片
for table_name in cat $v_table_list
do
#get table_name
v_table_name=echo $table_name|awk -F ":" '{print $1}'
#get table total nums
let v_total_num=echo $table_name|awk -F ":" '{print $2}'
#split pages
v_pages= ( ( (( (((( v t o t a l n u m / v_total_num/ vtotalnum/v_split_num))+1))
#根据分片数据,调用datax同步命令
for ((i=1;i<= v p a g e s ; i + + ) ) d o v s t a r t n u m = v_pages;i++)) do v_start_num= vpages;i++))dovstartnum=(( ( ( (( ((i-1))* v s p l i t n u m ) ) v e n d n u m = v_split_num)) v_end_num= vsplitnum))vendnum=(( i ∗ i* i∗v_split_num))
$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_table_name} \-Dsource_db_start_rowid=${v_start_num} \-Dsource_db_end_rowid=${v_end_num} \-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_table_name} \" $v_path_json >>"$v_path_log"$v_table_name"$v_sync_start_time".log 2>&1# echo $v_table_name,$v_start_num,$v_end_numdone
done
注意事项
1、将gbase的驱动gbase-connector-java-8.3.81.53-build55.2.1-bin.jar上传datax的plugin/reader/rdbmsreader/libs目录即可
配置文件
/opt/datax/job/gbasetomysql57.json
{"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 rowid>=$source_db_start_rowid and rowid<$source_db_end_rowid;"],"jdbcUrl": ["$source_db_conn"]}],"fetchSize": 1024}},"writer": {"name": "$target_reader","parameter": {"username": "$target_db_user","password": "$target_db_pwd","session": [],"preSql": [],"column": ["*"],"connection": [{"table": ["$target_table_name"],"jdbcUrl": "$target_db_conn"}]}}}]}
}
datax从gbase8a同步上亿大表到mysql5.7中相关推荐
- MySQL 上亿大表如何优化?
背景 XX 实例(一主一从)xxx 告警中每天凌晨在报 SLA 报警,该报警的意思是存在一定的主从延迟.(若在此时发生主从切换,需要长时间才可以完成切换,要追延迟来保证主从数据的一致性) XX 实例的 ...
- 毫秒级从百亿大表任意维度筛选数据,是怎么做到的…
作者:闲鱼技术-才思 预告:12月22日,ACOUG 联合创始人及多位核心专家将欢聚一堂,为"关键词解析2018技术圈的那些事儿"为主题的分享讨论,欢迎大家踊跃报名参会. 点击&q ...
- 如何做到毫秒级从百亿大表任意维度筛选数据?| 技术头条
业务背景 随着闲鱼业务的发展,用户规模达到数亿级,用户维度的数据指标,达到上百个之多.如何从亿级别的数据中,快速筛选出符合期望的用户人群,进行精细化人群运营,是技术需要解决的问题.业界的很多方案往往需 ...
- 毫秒级从百亿大表任意维度筛选数据,是怎么做到的.
文章概要 1 业务背景 随着闲鱼业务的发展,用户规模达到数亿级,用户维度的数据指标,达到上百个之多.如何从亿级别的数据中,快速筛选出符合期望的用户人群,进行精细化人群运营,是技术需要解决的问题.业界的 ...
- 将某个目录上的Excel表,导入到数据库中.sql
--将某个目录上的Excel表,导入到数据库中 --将所有的Excel文件放到一个目录中,假设为c:\test\,然后用下面的方法来做 create table #t(fname varchar(26 ...
- mysql二亿大表_面对有2亿条数据的mysql表
看到这个2亿5千条数据的表,我的内心是拒绝的,各种条件筛选要取出相应的数据,被折磨了两天,现在记录下心路历程 先分享下mysql相关的知识点1 名词解释 主键(PRIMARY KEY): 唯一索引,不 ...
- mysql 上亿记录_一入职!就遇到上亿(MySQL)大表的优化....
XX实例(一主一从)xxx告警中每天凌晨在报SLA报警,该报警的意思是存在一定的主从延迟(若在此时发生主从切换,需要长时间才可以完成切换要追延迟来保证主从数据的一致性) XX实例的慢查询数量最多(执行 ...
- Mysql5.7在上亿级别的存储性能测试报告 Mysql到底可不可以支持单表过亿?要分区么?分表?...
软硬件环境 Intel 酷睿i5 480M,2.66GHz(笔记本) 5400转硬盘 6G内存 Win10 64 位操作系统 PHP version: 7.0.6 Server version: 5. ...
- mysql大表迁移_MySQL 大表迁移
一.需求分析 线上100G 大表 table1 迁移,从DB1 迁移到DB2. 二.环境要求: 1.MySQL 使用InnoDB 存储引擎,且开启独立表空间: 2.两个库的MySQL版本一致(未做不同 ...
最新文章
- 【组队学习】【28期】基于Python的会员数据化运营
- 「机器学习」到底需要多少数据?
- history linux 日志服务器_编译bash实现history的syslog日志记录
- Shell图形化监控网络流量
- cad2016中选择全图字体怎么操作_DNF手游快速升级攻略 DNF手游怎么快速升级
- mysql 迁移后无法启动_Mysql数据迁移后启动出错_MySQL
- 如何用git将本地项目push到GitHub上?
- idea快捷键汇总mac_IntelliJ IDEA for MAC 快捷键设置汇总
- HTML示例06---段落(原格式标记)
- Java面试题-泛型篇十四
- linux金山打字通游戏版,金山打字游戏2010电脑版-金山打字游戏(最全大集合安装)下载V8.1.0.1官方版-西西软件下载...
- 压缩照片大小——PPT实现
- SQL SERVER STATISTICS
- app移动端连接nginx时,总报错recv() failed (104: Connection reset by peer) while proxying upgraded connection
- html的method属性,HTML中的form标签的method属性怎么用?这里有method属性的用法介绍...
- 《Head First设计模式》中文版 读书笔记
- 使用jquery生成随机二维码的方法
- 使用Python调用mdx字典文件进行查词
- 《数据仓库与数据挖掘教程》ch01绪论 章节整理
- 中国35岁以上的程序猿哪去了?,基于android的app开发详细步骤