GBase 8a
适配迁移
文章

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

发表于2024-05-15 09:26:5384次浏览3个评论

一、环境信息

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


二、简述


突然有一天,想看看自己C语言学的怎么样,是否有在进步,每多学一些C的知识点,就看看能否加入到工具中,希望能丰富它的功能,提升它的性能,欢迎大家使用,免费的哦,有什么建议和意见,大家可以在下方留言,有时间了我会冒个头来看看。

三、升级点


整体框架改进由原来的多线程改为多进程和多线程混用的形式,框架图如下:

 

序号功能备注
1性能提升INSERT方式提升约1.5倍左右,且性能的稳定性提升,不会有太大波动。
2负载均衡效果提升不会像原来的版本一样,出现一个线程忙,其他线程偷懒的现象。
3添加线程池用于将一个大任务拆分成一个个小任务,进行分部执行。
4添加共享内存和任务队列 用于进程间的通信,也就是大任务分发。

        
四、支持功能

序号功能备注
1GBASE8a到8a库级数据迁移表定义及其他暂不支持。
2单表INSERT批量加载 INSERT方式多行数据为一批。
3单表LOAD加载 加载后支持删除导出数据文件。
4并发加载多张表数据  
5均匀分配迁移任务 
6均匀分配数据库连接 
7日志模块 
8自定义迁移配置文件    自定义迁移参数。 
9任务重试功能如果任务执行出错,会尝试3次。
10GBASE8a到8a表级数据迁移表定义及其他暂不支持。支持一张或多张表。
11支持黑名单功能     


五、安装包下载地址


1、百度云盘链接:

链接:https://pan.baidu.com/s/1q5RX4j8LcOu8vx3BWS6InA 
提取码:1sfp


六、配置参数介绍

序号参数备注
1[Tool] Tool标签头,下面只能写Tool相关参数。
2ProcessNums 程序迁移时开的进程数。
3Level    迁移级别。
1:表级迁移,SpecifiedTab生效。
2:库级迁移,MigrationDb、BlackList生效。
4OsInfo    LOAD数据时使用。
样例:'工具所在操作系统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。
9MigrationDb    库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。
10BlackList    库级迁移参数,支持128个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。
11SpecifiedTab    表级迁移参数
格式:'源端查询字段;源端库名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
如果没有特定条件,可以不写,但必须有分隔符,举例如下:
';czg;testtab;;;zxj;NewTab;'
这样相当于testtab迁移到NewTab,没有任何特殊条件。
这个可以有多个标签,想迁移多少张表就写几个标签。
12[Target] Target标签头,下面只能写Target相关参数。
13ConnInfo    参考Source的。
14MigrationDb参考Source的。


七、安装步骤


大家也可以参考Readme.txt内容。

1、配置环境变量


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

[gbase@czg0 Exec]$ vim /home/gbase/.bashrc
export HAPPY_SUNSHINE_HOME=/home/gbase/HappySunshine
export LD_LIBRARY_PATH=$HAPPY_SUNSHINE_HOME/Libs:$LD_LIBRARY_PATH


2、生效环境变量

source /home/gbase/.bashrc


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

[gbase@czg0 Exec]$ pwd
/home/gbase/HappySunshine/Exec

[gbase@czg0 Exec]$ ldd HsManager
       linux-vdso.so.1 =>  (0x00007ffe699bf000)
       libPublicFunction.so => /home/gbase/HappySunshine/Libs/libPublicFunction.so (0x00007efe5cf3c000)
       libLog.so => /home/gbase/HappySunshine/Libs/libLog.so (0x00007efe5cd38000)
       libpthread.so.0 => /lib64/libpthread.so.0 (0x00007efe5cb1c000)
       libSqQueue.so => /home/gbase/HappySunshine/Libs/libSqQueue.so (0x00007efe5c916000)
       libMyThread.so => /home/gbase/HappySunshine/Libs/libMyThread.so (0x00007efe5c709000)
       libFileOperate.so => /home/gbase/HappySunshine/Libs/libFileOperate.so (0x00007efe5c503000)
       libDataConvertion.so => /home/gbase/HappySunshine/Libs/libDataConvertion.so (0x00007efe5c300000)
       libProcess.so => /home/gbase/HappySunshine/Libs/libProcess.so (0x00007efe5c0f7000)
       libGbase8aDb.so => /home/gbase/HappySunshine/Libs/libGbase8aDb.so (0x00007efe5bef2000)
       libgbase.so.16 => /home/gbase/HappySunshine/Libs/libgbase.so.16 (0x00007efe5ba32000)
       libMyHashTable.so => /home/gbase/HappySunshine/Libs/libMyHashTable.so (0x00007efe5b82e000)
       libc.so.6 => /lib64/libc.so.6 (0x00007efe5b460000)
       /lib64/ld-linux-x86-64.so.2 (0x00007efe5d13f000)
       libdl.so.2 => /lib64/libdl.so.2 (0x00007efe5b25c000)
       libm.so.6 => /lib64/libm.so.6 (0x00007efe5af5a000)

[gbase@czg0 Exec]$ ldd G8aExecutor
       linux-vdso.so.1 =>  (0x00007fde40821000)
       libPublicFunction.so => /home/gbase/HappySunshine/Libs/libPublicFunction.so (0x00007fde403ff000)
       libLog.so => /home/gbase/HappySunshine/Libs/libLog.so (0x00007fde401fb000)
       libGbase8aDb.so => /home/gbase/HappySunshine/Libs/libGbase8aDb.so (0x00007fde3fff6000)
       libgbase.so.16 => /home/gbase/HappySunshine/Libs/libgbase.so.16 (0x00007fde3fb36000)
       libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fde3f91a000)
       libSqQueue.so => /home/gbase/HappySunshine/Libs/libSqQueue.so (0x00007fde3f714000)
       libMyPool.so => /home/gbase/HappySunshine/Libs/libMyPool.so (0x00007fde3f511000)
       libMyThread.so => /home/gbase/HappySunshine/Libs/libMyThread.so (0x00007fde3f304000)
       libFileOperate.so => /home/gbase/HappySunshine/Libs/libFileOperate.so (0x00007fde3f0fe000)
       libDataConvertion.so => /home/gbase/HappySunshine/Libs/libDataConvertion.so (0x00007fde3eefb000)
       libProcess.so => /home/gbase/HappySunshine/Libs/libProcess.so (0x00007fde3ecf2000)
       libc.so.6 => /lib64/libc.so.6 (0x00007fde3e924000)
       libdl.so.2 => /lib64/libdl.so.2 (0x00007fde3e720000)
       libm.so.6 => /lib64/libm.so.6 (0x00007fde3e41e000)
       /lib64/ld-linux-x86-64.so.2 (0x00007fde40602000)



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

4、修改配置文件MigrationConfig.txt


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

//*代表不可以空
//单引号包围参数,分号分割参数项
//每行开头不可以有空格,不然会跳过此参数检查。
//SpecifiedTab参数可以有多个。

[Tool]                                                              //工具信息。
ProcessNums      : '2;'                                             //*程序迁移时开的进程数。
Level            : '2;'                                                //*迁移级别。
                                                                   //2:库级迁移,BlackList生效。
                                                                   //1:表级迁移,SpecifiedTab生效。
OsInfo           : '192.168.142.12;gbase;gbase;'                    //*LOAD使用。工具所在操作系统IP;操作系统用户;操作系统用户密码;长度同下方的数据库IP;数据库用户名;数据库用户密码;
OneBatchNums     : '80000;'                                         //*一个批次插入的数据条数。(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。
MigrationDb      : 'czg;'                                           //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。
BlackList        : 'testtab;'                                       //库级迁移参数,支持50个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。        
SpecifiedTab     : 'a,b,c;czg;testtab;Limit 10;x,y,z;zxj;NewTab;'            
                                                                   //表级迁移参数,格式:'源端查询字段;源端库名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
                                                                   //如果没有特定条件,可以不写,但必须有分隔符,举例如下:
                                                                   //';czg;testtab;;;zxj;NewTab;'
                                                                   //这样相当于testtab迁移到NewTab,没有任何特殊条件。
                                                                   //这个可以有多个标签,想迁移多少张表就写几个标签。
SpecifiedTab     : ';czg;testtab_copy;;;zxj;testtab_copy;'
SpecifiedTab     : ';czg;czg;;;zxj;czg;'

[Target]                                                            //目的端信息。
ConnInfo         : '192.168.142.12;czg;qwer1234;zxj;5258;utf8;'
MigrationDb      : 'zxj;'                                           //库级迁移参数,单个用户名长度限制29,需要迁移到的数据库名。


八、运行效果
 

[gbase@czg0 Exec]$ ./HsManager
 
[gbase@czg0 Exec]$ tail -100f HappySunshineV1.3.log
 
2024-05-09 09:58:46-P[24402]-T[24402]-[Info ]-HappySunshineV1.3
2024-05-09 09:58:46-P[24402]-T[24402]-[Info ]-PrintHsMngrSt      :
OsEnv              : /home/gbase/HappySunshine
OsUser             : gbase
OsPwd              : gbase
OsIp               : 192.168.142.10
SrcMigrationDb     : czg
TgtMigrationDb     : zxj
OneBatchNums       : 80000
SwitchNums         : 2000000
Level              : 1
ProcessNums        : 2
ConnInfo           : [192.168.142.12,root,,czg,5258,utf8] -> [192.168.142.12,czg,qwer1234,zxj,5258,utf8]
PrintSeq           : TaskQ,BlackList,WhiteList.
2024-05-09 09:58:46-P[24402]-T[24402]-[Info ]-StrSqQ             :
Data               : []
FrontIndex         : 0
RearIndex          : 0
SqQueueLen         : 0
2024-05-09 09:58:46-P[24402]-T[24402]-[Info ]-SqQueue Data       :
Data               : [ 'testtab' ]
FrontIndex         : 0
RearIndex          : 1
SqQueueLen         : 1
SqQueueMaxLen      : 50
Flag               : STRING_TYPE_FLAG
2024-05-09 09:58:46-P[24402]-T[24402]-[Info ]-SqQueue Data       :
Data               : [ 'a,b,c;czg;testtab;Limit 10;x,y,z;zxj;NewTab;' ,';czg;testtab_copy;;;zxj;testtab_copy;' ,';czg;czg;;;zxj;czg;' ]
FrontIndex         : 0
RearIndex          : 3
SqQueueLen         : 3
SqQueueMaxLen      : 50
Flag               : STRING_TYPE_FLAG
2024-05-09 09:58:47-P[24404]-T[24405]-[Info ]-Migration Complete : czg.testtab              -> zxj.NewTab              , DataNum :         10 Row, Elapsed Time :     1 s, Efficiency : 10 Row/s.
2024-05-09 09:58:47-P[24404]-T[24405]-[Info ]-Migration Complete : czg.czg                  -> zxj.czg                 , DataNum :       2050 Row, Elapsed Time :     0 s.
2024-05-09 09:59:32-P[24403]-T[24408]-[Info ]-Migration Complete : czg.testtab_copy         -> zxj.testtab_copy        , DataNum :    1310720 Row, Elapsed Time :    46 s, Efficiency : 28493 Row/s.
2024-05-09 10:01:32-P[24402]-T[24402]-[Info ]-HappySunshine Quit : OK.
————————————————


本人此篇文章CSDN地址:https://blog.csdn.net/qq_45111959/article/details/135057527?spm=1001.2014.3001.5502
 

评论

登录后才可以发表评论
用户头像
levvel发表于 9个月前
评论是对发帖人的一种尊重
用户头像
levvel发表于 4个月前
人生贵相知,何用金与钱
用户头像
levvel发表于 3个月前
太赞了!