自制数据库迁移工具-C版-03-HappySunshineV1.2-(支持Gbase8a)

目录

 一、环境信息

二、简述

三、升级点

四、支持功能

五、安装包下载地址

六、配置参数介绍

七、安装步骤

1、配置环境变量

2、生效环境变量

3、检验动态链接是否正常

4、修改配置文件MigrationConfig.txt

 八、运行效果


 一、环境信息

名称
CPUIntel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz
操作系统CentOS Linux release 7.9.2009 (Core)
内存3G
逻辑核数2
Gbase8a版本8.6.2-R43.34.27468a27
HappySunshine版本V1.2

二、简述

心血来潮写了这个小工具,主要是检验一下C语言的学习情况,功能不是很丰富,后面再逐步更新,如果大家测试出现什么问题,可以在博客下方留言,我找时间改进一下。

三、升级点

序号功能备注
1文件读取效率提升由原来的一次读取一个字节变为一次读取4096个字节。
2添加参数检查功能
3从环境变量中读取工具安装路径配置文件中的InsatllPath参数剔除,改为从HAPPY_SUNSHINE_HOME环境变量获取。
4SQL重试功能

如果sql执行出错,会尝试3次。

四、支持功能

序号功能备注
1GBASE8a到8a库级数据迁移表定义及其他暂不支持。
2单表INSERT批量加载INSERT方式多行数据为一批。
3单表LOAD加载加载后支持删除导出数据文件。
4并发加载多张表数据
5均匀分配迁移任务每个线程处理的表数相差不超过1。
6均匀分配数据库连接每个Gbase8a管理节点的数据库连接相差不超过1。
7日志落地
8自定义迁移配置文件自定义迁移参数。
9SQL重试功能

如果sql执行出错,会尝试3次。

五、安装包下载地址

已经放到开头啦,欢迎大家测试使用。电脑端才可以看见安装包。

六、配置参数介绍

序号参数备注
1[Tool]

Tool标签头,下面只能写Tool相关参数。

2ThreadNums程序迁移时开的线程数。
3Level迁移级别。2:库级迁移,MigrationDb、BlackList生效。1:表级迁移,WhiteList。现在只支持2。
4OsInfoLOAD数据时使用。
样例:'工具所在操作系统IP;操作系统用户;操作系统用户密码;'
长度同下方的数据库IP;数据库用户名;数据库用户密码;
5OneBatchNums一个批次插入的数据条数。(INSERT方式)可不要调过大,导致频繁申请内存,比较消耗性能。
6SwitchNums此数以上使用LOAD方法加载数据,以下使用INSERT方法。
7[Source] Source标签头,下面只能写Source相关参数。
8ConnInfo

样例:'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;'
(1)单个IP长度限制19,数据库IP地址。
(2)单个用户名长度限制19,数据库用户名。
(3)单个用户名密码长度限制29,数据库密码。
(4)单个数据库名长度限制29,数据库名。
(5)数据库端口。
(6)长度限制9,数据库连接字符集,支持utf8和gbk。
(7)ConnInfo数量需要小于等于ThreadNums。
(8)Source中ConnInfo和Target中ConnInfo数量需要一致。第一个对应第一个,第二个对应第二,以此类推。
(9)ConnInfo标签可以有多个。

9MigrationDb单个数据库名长度限制29,需要迁移的数据库名。
10BlackList库级迁移参数,支持128个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。
11WhiteList表级迁移参数,支持128个表,白名单,表名,长度限制参考Db。和MigrationDb一起使用可以。
12[Target]Target标签头,下面只能写Target相关参数。
13ConnInfo参考Source的。
14MigrationDb参考Source的。

七、安装步骤

大家可以看README的内容,其实是一样的。

下面的配置大家根据实际情况来,我这边只是给一个例子。

1、配置环境变量

/home/gbase/.bashrc中添加如下

export HAPPY_SUNSHINE_HOME=/home/gbase/HappySunshineTool
export LD_LIBRARY_PATH=$HAPPY_SUNSHINE_HOME/Libs:$LD_LIBRARY_PATH

2、生效环境变量

source /home/gbase/.bashrc

3、检验动态链接是否正常

[gbase@czg0 Bin]$ ldd HappySunshine linux-vdso.so.1 =>  (0x00007ffee8f8c000)libPublicFunction.so => /home/gbase/HappySunshineTool/Libs/libPublicFunction.so (0x00007f6e96720000)libLog.so => /home/gbase/HappySunshineTool/Libs/libLog.so (0x00007f6e9651d000)libFileOperate.so => /home/gbase/HappySunshineTool/Libs/libFileOperate.so (0x00007f6e96317000)libGbase8aOperate.so => /home/gbase/HappySunshineTool/Libs/libGbase8aOperate.so (0x00007f6e9610b000)libgbase.so.16 => /home/gbase/HappySunshineTool/Libs/libgbase.so.16 (0x00007f6e95cc4000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6e95aa8000)libMyHashTable.so => /home/gbase/HappySunshineTool/Libs/libMyHashTable.so (0x00007f6e958a4000)libSqQueue.so => /home/gbase/HappySunshineTool/Libs/libSqQueue.so (0x00007f6e9569f000)libDataConvertion.so => /home/gbase/HappySunshineTool/Libs/libDataConvertion.so (0x00007f6e9549c000)libc.so.6 => /lib64/libc.so.6 (0x00007f6e950ce000)libm.so.6 => /lib64/libm.so.6 (0x00007f6e94dcc000)/lib64/ld-linux-x86-64.so.2 (0x00007f6e96923000)

如果有动态库没有找到,就要看看环境变量是否配置正确或是否生效。

4、修改配置文件MigrationConfig.txt

具体的内容我都在配置文件中写好,大家按照规则来就行。

//*代表不可以空
//SSpecailTab、TSpecailTab、ConnInfo标签可以有多个
//单引号包围参数,分号分割参数项
//每行开头不可以有空格,不然会跳过此参数检查。
//#代表参数暂时没有实现。
//暂时只支持库级。[Tool]                                                          //工具信息。
ThreadNums   : '2;'                                             //*程序迁移时开的线程数。
Level        : '2;'	                                            //*迁移级别。//2:库级迁移,BlackList生效。//1:表级迁移,WhiteList生效。
OsInfo       : '192.168.142.10;gbase;gbase;'                    //*LOAD使用。工具所在操作系统IP;操作系统用户;操作系统用户密码;长度同下方的数据库IP;数据库用户名;数据库用户密码;
OneBatchNums : '30000;'                                         //*一个批次插入的数据条数。(INSERT方式)
SwitchNums   : '2000000;'                                       //*此数以上使用LOAD,以下使用INSERT。[Source]                                                        //源端信息。
ConnInfo     : '192.168.142.12;root;;czg;5258;utf8;'            //'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;'//*单个IP长度限制19,数据库IP地址。//*单个用户名长度限制19,数据库用户名。//*单个用户名密码长度限制29,数据库密码。//*单个数据库名长度限制29,数据库名。//*数据库端口。//*长度限制9,数据库连接字符集,支持utf8和gbk。//ConnInfo数量需要小于等于ThreadNums。//Source中ConnInfo和Target中ConnInfo数量需要一致。第一个对应第一个,第二个对应第二,以此类推。
ConnInfo     : '192.168.142.12;root;;czg;5258;utf8;'
MigrationDb  : 'czg;'                                           //*单个数据库名长度限制29,需要迁移的数据库名。
BlackList    : ''                                               //库级迁移参数,支持128个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。        
WhiteList    : 'testtab;testtab_copy;'                          //表级迁移参数,支持128个表,白名单,表名,长度限制参考Db。和MigrationDb一起使用可以。
#SSpecailTab  : 'czg.testtab;a,b,c;Limit 10;'                    //源端库名.表名;多个列;附件条件;
#SSpecailTab  : 'czg.haha;;WHERE A = 1;'                         //源端库名.表名;多个列;附件条件;[Target]                                                        //目的端信息。
ConnInfo     : '192.168.142.12;czg;qwer1234;zxj;5258;utf8;'
ConnInfo     : '192.168.142.12;czg;qwer1234;zxj;5258;utf8;'
MigrationDb  : 'zxj;'                                           //*单个用户名长度限制29,需要迁移到的数据库名。
#TSpecailTab  : 'czg.testtab;a,b,c;zxj.testtab;'                 //源端库名.表名;多个列;目的端库名.表名;
#TSpecailTab  : 'czg.haha;;czg.haha;'                            //源端库名.表名;多个列;目的端库名.表名;

 八、运行效果

HeadNodeArray[0]   : [(czg,tmp,0),(czg,test_table_3,0),(czg,test_table_1,0),(czg,test_2023_09_21,0),(czg,test_2023_09_14,0),(czg,test_2023,0),(czg,test_09_19,0),(czg,test,0),(czg,sun_gbk,0),(czg,strtab,0),(czg,sg_t_loadconfig_incr,0),(czg,moon,0),(czg,jointable,0),(czg,hash_tab,0),(czg,czg_test,0),(czg,b,0),(czg,a,0)]
TableNum           : 17
HeadNodeArray[1]   : [(czg,testtab,0),(czg,test_table_2,0),(czg,test_table,0),(czg,test_2023_09_19,0),(czg,test_20230720,0),(czg,test_12_05,0),(czg,test20230302,0),(czg,t_policy_ext_info,0),(czg,sun,0),(czg,sg_t_loadconfig_incr_odm,0),(czg,nodedatamap,0),(czg,jointable1,0),(czg,hash_tb_like,0),(czg,d_admin_kpi_code,0),(czg,czg,0),(czg,alldbvoidrate,0)]

我们只需要关注结尾的这一块输出即可,如果每张表结尾都是0,表示迁移成功,如果有个别表状态为1,表示报错,如果是2,表示没跑此表。

[gbase@czg2 Bin]$ ./HappySunshine

配置文件MigrationConfig.txt完毕,到Bin目录下执行即可。日志在Log目录下。

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

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

相关文章

ML流程标准规范汇总

1. 机器学习简介 机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测。它是一个流程性很强的工作,包括数据采集、数据清洗、数据预处理、特征工程、模型调优、模型融合、模型验证、模型持久化、在线服务等模块。 而在这些基本的步…

8位LED流水灯设计

一、实验目的 本实验为设计性实验,要求理解和掌握触发器、译码器、时序脉冲、LED显示单元的工作原理与功能,通过设计和制作8位的LED流水灯电路,综合运用触发器和译码器等逻辑器件及显示单元进行功能性时序逻辑电路的设计和制作,掌握时序逻辑电路的基本设计和调试方法。 二、…

SpringBoot的web开发

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 web开发1 web场景1.1 自动配置1.2 默认效果 &#x1f48e;总结 web开发 SpringBoot的web开发能力是由SpringMVC提供的 1 web场景 1.1 自动配置 整合web场景 <dependency><groupId>org.springframewo…

北斗三号短报文+4G的低功耗太阳能船载报位监控方案

国内海洋船舶群体长期在海上航行&#xff0c;多数海员由于海面无信号覆盖、个人卫星通信费用昂贵、无法自由使用船载公用卫星通信设备等原因&#xff0c;无法与家人和朋友保持联系&#xff0c;甚至在遇到危险的时候也无法及时向外界发出求救信号&#xff0c;管理单位难以掌握船…

docker-harbor的私有仓库

目录 harbor的特性 harbor的组件 docker-harbor部署 Docker1 页面访问 ​编辑 上传镜像 创建项目 创建用户 给项目创建成员 上传私有仓库 docker2(远程主机上传) 如何实现仓库之间进行同步 docker3 实现远程仓库同步 仓库 保存镜像 私有&#xff0c;自定义用户…

WPF仿网易云搭建笔记(1):项目搭建

文章目录 前言项目地址动态样式组合样式批量样式覆盖Prism新建UserControler修改Material Design 笔刷收放列表可以滚动的StackPanel列表点击展开或折叠 实现效果 前言 今天接着继续细化代码&#xff0c;把整体框架写出来 项目地址 WPF仿网易云 Gitee仓库 动态样式 【WPF】C#…

企业微信模板卡片消息

投票选择型和多项选择型卡片仅企业微信3.1.12及以上版本支持 文本通知型、图文展示型和按钮交互型三种卡片仅企业微信3.1.6及以上版本支持&#xff08;但附件下载功能仍需更新至3.1.12&#xff09; 微工作台&#xff08;原企业号&#xff09;不支持展示模板卡片消息 文本通知型…

C#函数(方法)

C# 函数&#xff08;Method&#xff09; 函数也被称为方法&#xff08;在对象内部叫方法&#xff0c;不隶属于对象的时候叫函数&#xff09;。 方法是一段可重复使用的代码块&#xff0c;用于执行特定的操作&#xff0c;也可以有返回的值。 函数分为两大类&#xff1a;静态函数…

知识库SEO:提升网站内容质量与搜索引擎排名的策略

随着搜索引擎算法的不断更新和优化&#xff0c;单纯依靠关键词堆砌和外部链接的时代已经过去。现在的SEO&#xff08;搜索引擎优化&#xff09;已经转向了以提供高质量、有价值内容为核心的阶段。知识库SEO便是这个新阶段的重要策略之一。 | 一、知识库SEO的概念与意义 1.定义…

【隐私计算】tf-encrypted隐私计算框架/库基础

tf-encrypted介绍 TF Encrypted是TensorFlow中一个用于加密机器学习的框架&#xff0c;它看起来和感觉上都很像TensorFlow&#xff0c;利用了Keras API 的易用性&#xff0c;同时通过安全多方计算和同态加密实现了对加密数据的训练和预测。TF Encrypted的目标是使保护隐私的机器…

Shell 脚本 基础 学习 笔记 (超详细,适合新手观看学习)

Shell脚本语言 Shell关键字Shell变量命名规则使用变量赋值变量自定义变量命令行交互read定义变量类型declare预定义变量环境变量 Shell字符串Shell中的集合类型数组&#xff08;array&#xff09;数组定义和赋值数组元素访问获取数组长度 map Shell运算算数运算符关系运算符布尔…

关东升老师从小白到大牛系列丛书(由清华大学出版社出版)

助力技术成长&#xff0c;成就大牛之路 在这个科技日新月异的时代&#xff0c;掌握一门编程语言或专业技能已是必备&#xff0c;不再是奢侈。清华大学出版社出版的“从小白到大牛”的系列丛书&#xff0c;涵盖Python、Java、Kotlin、Android和SQL&#xff0c;助你快速在技术之…

Ubuntu22下源码编译CEF(branch=6045)+mp4+mp3笔记

前段时间编译了win版本&#xff0c;最近捣鼓一下Ubuntu版本。 配置网络,Ubuntu在网络配置填写了代理&#xff0c;在终端还是要输入 set http_proxyxxxx:xx set https_proxyxxxx:xx 这样避免大部分的git代码下载 为了减少下载代码和避免git那个几G内存的坑&#xff0c;我直接…

Python 标准库SYS

标准库sys引入及方法介绍和示例。 简介 sys 模块主要负责与 Python 解释器进行交互&#xff0c;该模块提供了一系列用于控制 Python 运行环境的函数和变量。 命令行参数 可以获取传递给python 执行文件的命令行参数&#xff0c;命令行参数是由sys模块存储在名为argv的列表中&…

通信子网在计算机网络中的地位和作用

一、通信子网是计算机网络的核心组成部分 通信子网是计算机网络的核心组成部分&#xff0c;它负责为计算机网络中的各种设备提供通信支持。无论是主机之间的数据传输&#xff0c;还是主机与终端之间的数据通信&#xff0c;都需要通过通信子网来实现。通信子网是连接各个设备的关…

严世芸龟法养生经

文章目录 严世芸理念荤素搭配&#xff0c;不偏嗜动静结合心平气和 龟息法 严世芸 严世芸&#xff0c;出生于1940年&#xff0c;现任上海中医药大学的主任医师&#xff0c;教授。他父亲是近代上海有名的中医&#xff0c;他又是著名医家张伯臾的亲传弟子。 从小就在父亲诊室里长…

leetCode算法—3.无重复字符的最长子串

1.给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 …

PO 对象被锁定

问题描述 在创建PO对象的时候&#xff0c;由于上次电脑断网导致PO连接中断&#xff0c;但服务器中登录用户还在占用PO对象&#xff0c;需要手动在POD中删除锁对象才可编辑 解决方案 登录到POD页面&#xff0c;点击右上角Administration 点击Lock Overview&#xff0c;查看…

营销投放下半场,游戏行业如何寻觅进化空间?

摘要&#xff1a;微博&#xff0c;游戏行业突围市场新利器 游戏行业&#xff0c;格局永远在变。 从2017年互联网大厂集体盯上游戏大蛋糕&#xff0c;到2021年行业收缩&#xff0c;再到今年上半年实际销售收入继去年首次出现同比下滑…几经过山车式行情的游戏行业&#xff0c;…

加密友好不意味容易!亚洲地区实施了世界上最严格的加密规定!

2023年的一大主题是亚洲作为加密货币世界中至关重要的地区的持续崛起。这在很大程度上要归功于新加坡等著名的数字资产中心&#xff0c;以及香港和日本的重新崛起。 虽然这些司法管辖区确实欢迎数字资产&#xff0c;但围绕它们的炒作可能会有些误导&#xff0c;加密友好并非意味…