目录
一、环境信息
名称 | 值 |
CPU | Intel(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 | 添加共享内存和任务队列 | 用于进程间的通信,也就是大任务分发。 |
四、支持功能
序号 | 功能 | 备注 |
1 | GBASE8a到8a库级数据迁移 | 表定义及其他暂不支持。 |
2 | 单表INSERT批量加载 | INSERT方式多行数据为一批。 |
3 | 单表LOAD加载 | 加载后支持删除导出数据文件。 |
4 | 并发加载多张表数据 | |
5 | 均匀分配迁移任务 | |
6 | 均匀分配数据库连接 | |
7 | 日志模块 | |
8 | 自定义迁移配置文件 | 自定义迁移参数。 |
9 | 任务重试功能 | 如果任务执行出错,会尝试3次。 |
10 | GBASE8a到8a表级数据迁移 | 表定义及其他暂不支持。支持一张或多张表。 |
11 | 支持黑名单功能 |
五、安装包下载地址
1、电脑版打开本博客可以在文章开头看到安装包,如果看不到,可以去我的CSDN资源栏找到。
2、百度云盘链接:
链接:https://pan.baidu.com/s/1q5RX4j8LcOu8vx3BWS6InA
提取码:1sfp
六、配置参数介绍
序号 | 参数 | 备注 |
1 | [Tool] | Tool标签头,下面只能写Tool相关参数。 |
2 | ProcessNums | 程序迁移时开的进程数。 |
3 | Level | 迁移级别。 1:表级迁移,SpecifiedTab生效。 2:库级迁移,MigrationDb、BlackList生效。 |
4 | OsInfo | LOAD数据时使用。 样例:'工具所在操作系统IP;操作系统用户;操作系统用户密码;' 长度同下方的数据库IP;数据库用户名;数据库用户密码; |
5 | OneBatchNums | 一个批次插入的数据条数。(INSERT方式) |
6 | SwitchNums | 此数以上使用LOAD方法加载数据,以下使用INSERT方法。 |
7 | [Source] | Source标签头,下面只能写Source相关参数。 |
8 | ConnInfo | 样例:'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;' (1)单个IP长度限制19,数据库IP地址。 (2)单个用户名长度限制19,数据库用户名。 (3)单个用户名密码长度限制29,数据库密码。 (4)单个数据库名长度限制29,数据库名。 (5)数据库端口。 (6)长度限制9,数据库连接字符集,支持utf8和gbk。 |
9 | MigrationDb | 库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。 |
10 | BlackList | 库级迁移参数,支持128个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。 |
11 | SpecifiedTab | 表级迁移参数 格式:'源端查询字段;源端库名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;' 如果没有特定条件,可以不写,但必须有分隔符,举例如下: ';czg;testtab;;;zxj;NewTab;' 这样相当于testtab迁移到NewTab,没有任何特殊条件。 这个可以有多个标签,想迁移多少张表就写几个标签。 |
12 | [Target] | Target标签头,下面只能写Target相关参数。 |
13 | ConnInfo | 参考Source的。 |
14 | MigrationDb | 参考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.3 | 48545 | INSERT | 本机Linux虚拟机 |
87381 | LOAD | ||
GBaseMigrationToolkit_8.5.20.0_build4_winx86_64 | 13375 | INSERT | 本机win |