背景

需要从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/ vt​otaln​um/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= vp​ages;i++))dovs​tartn​um=(( ( ( (( ((i-1))* v s p l i t n u m ) ) v e n d n u m = v_split_num)) v_end_num= vs​plitn​um))ve​ndn​um=(( 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中相关推荐

  1. MySQL 上亿大表如何优化?

    背景 XX 实例(一主一从)xxx 告警中每天凌晨在报 SLA 报警,该报警的意思是存在一定的主从延迟.(若在此时发生主从切换,需要长时间才可以完成切换,要追延迟来保证主从数据的一致性) XX 实例的 ...

  2. 毫秒级从百亿大表任意维度筛选数据,是怎么做到的…

    作者:闲鱼技术-才思 预告:12月22日,ACOUG 联合创始人及多位核心专家将欢聚一堂,为"关键词解析2018技术圈的那些事儿"为主题的分享讨论,欢迎大家踊跃报名参会. 点击&q ...

  3. 如何做到毫秒级从百亿大表任意维度筛选数据?| 技术头条

    业务背景 随着闲鱼业务的发展,用户规模达到数亿级,用户维度的数据指标,达到上百个之多.如何从亿级别的数据中,快速筛选出符合期望的用户人群,进行精细化人群运营,是技术需要解决的问题.业界的很多方案往往需 ...

  4. 毫秒级从百亿大表任意维度筛选数据,是怎么做到的.

    文章概要 1 业务背景 随着闲鱼业务的发展,用户规模达到数亿级,用户维度的数据指标,达到上百个之多.如何从亿级别的数据中,快速筛选出符合期望的用户人群,进行精细化人群运营,是技术需要解决的问题.业界的 ...

  5. 将某个目录上的Excel表,导入到数据库中.sql

    --将某个目录上的Excel表,导入到数据库中 --将所有的Excel文件放到一个目录中,假设为c:\test\,然后用下面的方法来做 create table #t(fname varchar(26 ...

  6. mysql二亿大表_面对有2亿条数据的mysql表

    看到这个2亿5千条数据的表,我的内心是拒绝的,各种条件筛选要取出相应的数据,被折磨了两天,现在记录下心路历程 先分享下mysql相关的知识点1 名词解释 主键(PRIMARY KEY): 唯一索引,不 ...

  7. mysql 上亿记录_一入职!就遇到上亿(MySQL)大表的优化....

    XX实例(一主一从)xxx告警中每天凌晨在报SLA报警,该报警的意思是存在一定的主从延迟(若在此时发生主从切换,需要长时间才可以完成切换要追延迟来保证主从数据的一致性) XX实例的慢查询数量最多(执行 ...

  8. Mysql5.7在上亿级别的存储性能测试报告 Mysql到底可不可以支持单表过亿?要分区么?分表?...

    软硬件环境 Intel 酷睿i5 480M,2.66GHz(笔记本) 5400转硬盘 6G内存 Win10 64 位操作系统 PHP version: 7.0.6 Server version: 5. ...

  9. mysql大表迁移_MySQL 大表迁移

    一.需求分析 线上100G 大表 table1 迁移,从DB1 迁移到DB2. 二.环境要求: 1.MySQL 使用InnoDB 存储引擎,且开启独立表空间: 2.两个库的MySQL版本一致(未做不同 ...

最新文章

  1. 【组队学习】【28期】基于Python的会员数据化运营
  2. 「机器学习」到底需要多少数据?
  3. history linux 日志服务器_编译bash实现history的syslog日志记录
  4. Shell图形化监控网络流量
  5. cad2016中选择全图字体怎么操作_DNF手游快速升级攻略 DNF手游怎么快速升级
  6. mysql 迁移后无法启动_Mysql数据迁移后启动出错_MySQL
  7. 如何用git将本地项目push到GitHub上?
  8. idea快捷键汇总mac_IntelliJ IDEA for MAC 快捷键设置汇总
  9. HTML示例06---段落(原格式标记)
  10. Java面试题-泛型篇十四
  11. linux金山打字通游戏版,金山打字游戏2010电脑版-金山打字游戏(最全大集合安装)下载V8.1.0.1官方版-西西软件下载...
  12. 压缩照片大小——PPT实现
  13. SQL SERVER STATISTICS
  14. app移动端连接nginx时,总报错recv() failed (104: Connection reset by peer) while proxying upgraded connection
  15. html的method属性,HTML中的form标签的method属性怎么用?这里有method属性的用法介绍...
  16. 《Head First设计模式》中文版 读书笔记
  17. 使用jquery生成随机二维码的方法
  18. 使用Python调用mdx字典文件进行查词
  19. 《数据仓库与数据挖掘教程》ch01绪论 章节整理
  20. 中国35岁以上的程序猿哪去了?,基于android的app开发详细步骤

热门文章

  1. 当前Activity跳转到另外一个Activity
  2. Gamma分布与逆Gamma分布
  3. 安装Ubuntu系统教程(图文结合-详细步骤)
  4. 用html语言编写表格,HTML表格(table标签)
  5. PHP 批量删除功能
  6. 关于testhome junit参数化的问题解决
  7. B. Most socially-distanced subsequence(思维+模拟)
  8. 基于GIS技术的地质灾害易发性评价—水系提取(二)
  9. 深度神经网络是谁发明的,深度神经网络谁提出的
  10. 开源1年半,newbee-mall 收获 9K star|项目复盘