自制数据库迁移工具-C版-03-HappySunshineV1.2-(支持Gbase8a)
2023-12-15 18:41:12
目录
?一、环境信息
名称 | 值 |
CPU | Intel(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环境变量获取。 |
4 | SQL重试功能 | 如果sql执行出错,会尝试3次。 |
四、支持功能
序号 | 功能 | 备注 |
1 | GBASE8a到8a库级数据迁移 | 表定义及其他暂不支持。 |
2 | 单表INSERT批量加载 | INSERT方式多行数据为一批。 |
3 | 单表LOAD加载 | 加载后支持删除导出数据文件。 |
4 | 并发加载多张表数据 | |
5 | 均匀分配迁移任务 | 每个线程处理的表数相差不超过1。 |
6 | 均匀分配数据库连接 | 每个Gbase8a管理节点的数据库连接相差不超过1。 |
7 | 日志落地 | |
8 | 自定义迁移配置文件 | 自定义迁移参数。 |
9 | SQL重试功能 | 如果sql执行出错,会尝试3次。 |
五、安装包下载地址
已经放到开头啦,欢迎大家测试使用。电脑端才可以看见安装包。
六、配置参数介绍
序号 | 参数 | 备注 |
1 | [Tool] | Tool标签头,下面只能写Tool相关参数。 |
2 | ThreadNums | 程序迁移时开的线程数。 |
3 | Level | 迁移级别。2:库级迁移,MigrationDb、BlackList生效。1:表级迁移,WhiteList。现在只支持2。 |
4 | OsInfo | LOAD数据时使用。 样例:'工具所在操作系统IP;操作系统用户;操作系统用户密码;' 长度同下方的数据库IP;数据库用户名;数据库用户密码; |
5 | OneBatchNums | 一个批次插入的数据条数。(INSERT方式)可不要调过大,导致频繁申请内存,比较消耗性能。 |
6 | SwitchNums | 此数以上使用LOAD方法加载数据,以下使用INSERT方法。 |
7 | [Source]? | Source标签头,下面只能写Source相关参数。 |
8 | ConnInfo | 样例:'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;' |
9 | MigrationDb | 单个数据库名长度限制29,需要迁移的数据库名。 |
10 | BlackList | 库级迁移参数,支持128个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。 |
11 | WhiteList | 表级迁移参数,支持128个表,白名单,表名,长度限制参考Db。和MigrationDb一起使用可以。 |
12 | [Target] | Target标签头,下面只能写Target相关参数。 |
13 | ConnInfo | 参考Source的。 |
14 | MigrationDb | 参考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目录下。
文章来源:https://blog.csdn.net/qq_45111959/article/details/134079459
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!