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

目录

一、环境信息

二、简述

三、升级点

四、支持功能

五、安装包下载地址

六、配置参数介绍

七、安装步骤

1、配置环境变量

2、生效环境变量

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

4、修改配置文件MigrationConfig.txt

 八、运行效果

九、性能对比

1、测试数据

2、对比表格

3、HappySunshine截图

(1)INSERT

(2)LOAD

4、GBaseMigrationToolkit截图


一、环境信息

名称
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的知识点,就看看能否加入到工具中,希望能丰富它的功能,提升它的性能,欢迎大家使用,免费的哦,有什么建议和意见,大家可以在下方留言,有时间了我会冒个头来看看。

三、升级点

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

b57fa119095e48899dc4b33f7c3a8b50.png

序号功能备注
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、电脑版打开本博客可以在文章开头看到安装包,如果看不到,可以去我的CSDN资源栏找到。

2、百度云盘链接:

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

六、配置参数介绍

序号参数备注
1[Tool]Tool标签头,下面只能写Tool相关参数。
2ProcessNums程序迁移时开的进程数。
3Level迁移级别。
1:表级迁移,SpecifiedTab生效。
2:库级迁移,MigrationDb、BlackList生效。
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。
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.

九、性能对比

我们测试将czg库下的testtab_copy拉到zxj库下,对比效率。

1、测试数据

gbase> select count(*) from czg.testtab_copy;
+----------+
| count(*) |
+----------+
|  1310720 |
+----------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select * from czg.testtab_copy limit 10;
+------+------+------+--------------------+---------------------+--------------------------+------------+---------------------+
| a    | b    | c    | d                  | e                   | f                        | g          | h                   |
+------+------+------+--------------------+---------------------+--------------------------+------------+---------------------+
|    1 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    1 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    1 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    1 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    1 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    2 |  1.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    2 |  4.1 | czg  | 快乐的小天使       | qwertasdsdfzxczxxv  | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    2 |  4.1 | czg  | 快乐的小天使       | qwertasdsdfz\xczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    2 |  4.1 | czg  | 快乐的小天使       | qwertasdsdfz.xczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
|    2 |  4.1 | czg  | 快乐的小天使       | qwertasdsdfz.xczxxv | gregergjsfishfuieehfuiew | 1995-09-18 | 2022-08-03 09:24:00 |
+------+------+------+--------------------+---------------------+--------------------------+------------+---------------------+
10 rows in set (Elapsed: 00:00:00.31)

gbase> desc czg.testtab_copy;
+-------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type         | Null | Key | Default           | Extra                       |
+-------+--------------+------+-----+-------------------+-----------------------------+
| a     | int(11)      | YES  |     | NULL              |                             |
| b     | double       | YES  |     | NULL              |                             |
| c     | varchar(100) | YES  |     | NULL              |                             |
| d     | text         | YES  |     | NULL              |                             |
| e     | blob         | YES  |     | NULL              |                             |
| f     | longblob     | YES  |     | NULL              |                             |
| g     | date         | YES  |     | NULL              |                             |
| h     | timestamp    | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+--------------+------+-----+-------------------+-----------------------------+
8 rows in set (Elapsed: 00:00:00.00)

2、对比表格

工具名每秒条数方式环境
HappySunshineV1.348545INSERT本机Linux虚拟机
87381LOAD
GBaseMigrationToolkit_8.5.20.0_build4_winx86_6413375INSERT本机win

3、HappySunshine截图

(1)INSERT

(2)LOAD

4、GBaseMigrationToolkit截图

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值