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

📅 2026/8/1 19:29:49
自制数据库迁移工具-C版-03-HappySunshineV1.2-(支持Gbase8a)
目录一、环境信息二、简述三、升级点四、支持功能五、安装包下载地址六、配置参数介绍七、安装步骤1、配置环境变量2、生效环境变量3、检验动态链接是否正常4、修改配置文件MigrationConfig.txt八、运行效果最新版本工具文档链接HappySunshine一、环境信息名称值CPUX86操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2Gbase8a版本8.6.2-R43.34.27468a27HappySunshine版本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。7ConnInfo数量需要小于等于ThreadNums。8Source中ConnInfo和Target中ConnInfo数量需要一致。第一个对应第一个第二个对应第二以此类推。9ConnInfo标签可以有多个。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_PATH2、生效环境变量source /home/gbase/.bashrc3、检验动态链接是否正常[gbaseczg0 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表示没跑此表。[gbaseczg2 Bin]$ ./HappySunshine配置文件MigrationConfig.txt完毕到Bin目录下执行即可。日志在Log目录下。