如何通过Datakit工具完成MySQL到openGauss的数据迁移
发表于 2023/12/11
0
MySQL迁移
1. 前置操作
(1)实例管理中创建数据源
MySQL和openGauss数据库启动后可在datakit平台--资源中心--实例管理中创建对应的数据源。
创建MySQL数据源:
此处可添加“启停命令总结”小节创建好的MySQL用户和密码
ip为实际ip
port为默认端口3306
用户名:mysql_test
密码:password123
创建openGauss数据源:
此处可添加“启动数据库”小节创建好的openGauss用户和密码。
ip为实际ip
port为默认端口5432
用户名:opengauss_test
密码:Sample@123
创建完成后DataKit平台界面会显示对应的数据源:
(2) DataKit服务器管理中添加服务器
在datakit平台--资源中心--服务器管理中添加对应的服务器,被管理的机器才可用于安装迁移插件,本次实验用本机作为迁移插件的执行机。
请注意这里密码为root用户的密码,并需要勾选记住密码,否则将不能用作迁移插件的执行机。
服务器添加完成后DataKit平台会显示对应的服务器信息:
在用户管理界面添加个人用户test。
用户添加完成后会显示在用户列表中显示已添加的用户。
(3)MySQL端预置数据
连接MySQL,并执行如下SQL语句:
mysql -h xx.xx.xx.xx -P 3306 -u mysql_test -ppassword123 -S
/opt/datakit/tools/mysql5.7/mysql.sock
其中-h指定的参数 xx.xx.xx.xx需修改为实际ip。
本次实验中给MySQL端预制一些数据,主要包括表、数据、索引。
drop database if exists source_db;
create database source_db;
use source_db;
create table table1(id int, name varchar(10), col varchar(20), primary key(id));
insert into table1 values(1,'data', 'data1');
insert into table1 values(2,'data', 'data2');
insert into table1 values(3,'data', 'data3');
insert into table1 values(4,'data', 'data4');
insert into table1 values(5,'data', 'data5');
insert into table1 values(6,'data', 'data6');
create view view1 as select * from table1;
create function mysql_func1(s char(20)) returns char(50) deterministic return concat('mysql_func1, ',s,'!');
create trigger trigger1 before insert on table1 for each row set new.col = concat(new.name, new.id);
create procedure procedure1() select * from table1;
迁移过程
MySQL迁移全流程包括全量迁移、全量校验、增量迁移、增量校验和反向迁移五个阶段,下面将详细介绍迁移全流程。
1. 创建迁移任务
在Datakit平台数据迁移--迁移任务中心--创建迁移任务,选定源端数据库(source_db)和目的端数据库(target_db),添加子任务,迁移过程模式选择在线模式。
迁移模式包括离线和在线两种模式,其中离线模式包括全量迁移和全量校验两个阶段,在线模式包括全量迁移、全量校验、增量迁移、增量校验、反向迁移和五个阶段,本次实践选择在线模式,囊括业务割接的整个过程。
详细描述如下:
(1)在Datakit平台数据迁移--迁移任务中心--创建迁移任务
(2)选定源端数据库(source_db)和目的端数据库(target_db),添加子任务,迁移过程模式选择在线模式
(3)编辑配置参数
可直接使用默认参数,无需修改,或者根据实际自定义。
2. 安装迁移插件
首次创建迁移任务时,需安装迁移插件,针对服务器管理中添加的服务器,选择开始安装即可。
若无对应的物理机,请记得将要安装插件的机器添加至服务器管理中,并添加。
插件安装分为离线安装、在线安装和导入安装三种方式,本次实验推荐离线安装方式,需提前下载好安装包,并上传对应的安装包即可。
针对不同操作系统的迁移插件安装包可从如下链接获取:
(1)在线安装,指定安装用户(“前置操作”小节中服务器管理中管理的机器添加的个人用户)和安装目录。
(2)离线安装,指定安装用户(“前置操作”小节中服务器管理中管理的机器添加的个人用户)和安装目录,并上传安装包。
(3)导入安装,指定安装用户(3.1.1节中服务器管理中管理的机器添加的个人用户)和安装目录。
3. 启动迁移任务
对于在线模式的迁移任务,任务启动后,会首先进入全量迁移阶段,将3.1.1小节MySQL端预置的数据迁移至目标库,全量迁移结束后会进入全量校验阶段,会输出每个表的校验结果;之后进入增量迁移阶段,增量迁移阶段会同步执行增量校验。详情界面可以看到迁移过程状态信息。
详细描述如下:
(1)启动迁移任务
详情界面可以看到详细的迁移过程状态信息。
(2)首先进行全量迁移
全量迁移会将表、数据、视图、函数、触发器、存储过程迁移至openGauss数据库,全量迁移结束后,可在openGauss端验证数据及对象是否成功迁移。
图示为全量迁移完成:
openGauss验证结果:
连接数据库,切换至MySQL库同名的schema下,查看表、数据、视图、函数、存储过程、触发器是否正常迁移。
下图示显示全量迁移正常。
(3)全量迁移完成后进行全量校验
全量校验输出每个表的校验结果。
(4)全量校验完成后进行增量迁移
增量迁移会将增量的数据(增删改)和DDL迁移至openGauss数据库,与增量迁移并行执行的还有增量校验。
增量迁移进行增删改操作。
a. 插入操作
MySQL增量迁移过程中插入一条数据:
insert into table1(id,name) values(7,'data');
迁移工具进度信息提示已迁移一条数据。
openGauss端数据正常同步。
b. 修改操作
MySQL增量迁移过程中修改一条数据:
update table1 set name = 'new_data' where id = 6;
迁移工具进度信息提示累计已迁移两条数据。
openGauss端数据同步正常:
c. 删除操作
MySQL增量迁移过程中删除一条数据:
delete from table1 where id = 5;
迁移工具进度信息提示累计已迁移三条数据
openGauss端数据同步正常。
d. DDL操作
MySQL增量迁移过程中执行一条DDL:
create table table2(id int, name varchar(10));
迁移工具进度信息提示累计已迁移四条数据。
openGauss端数据同步正常。
上述提供一些增量迁移的示例,模拟业务增量数据迁移。
4. 业务割接
等增量数据全部迁移完成后,可进行业务割接。停止增量迁移,并启动反向迁移,修改应用程序的配置文件,启动应用程序,用openGauss承载业务。
在openGauss端进行增删改操作,验证MySQL端数据是否同步修改。
详细描述如下:
(1)增量数据追平后可进行业务割接
当剩余待写入数据为0条,表示增量数据已追平,可进行业务割接。
(2)停止增量迁移
(3)启动反向迁移
openGauss端进行数据增删改,模拟业务数据,验证业务数据可反向同步至MySQL端。
a. 插入操作
openGauss端插入一条数据:
insert into table1 values(8,'data');
迁移工具进度信息提示已迁移一条数据。
MySQL端数据同步成功。
b. 修改操作
openGauss端进行修改操作:
update table1 set name = 'name' where id = 1;
迁移工具显示已迁移两条数据。
MySQL端数据同步正常。
c. 删除操作
openGauss端删除一条数据:
delete from table1 where id = 3;
迁移工具显示已迁移三条数据。
MySQL端数据同步正常。
上述提供一些反向迁移示例,模拟业务数据反向迁移。
(4)停止反向迁移
反向迁移将数据从openGauss实时迁移至MySQL数据库,可保证源端数据库与目标数据库实时一致。作为一种数据逃生的通道,当目标数据库出现问题时,可及时将应用切回至源端数据库。
当业务平稳运行一段时间后,可停止反向迁移。
至此,已演示业务搬迁的全流程。
MySQL迁移工具总结
MySQL迁移全流程包括全量迁移、全量校验、增量迁移、增量校验和反向迁移五个阶段,每个阶段都由单独的工具完成。迁移portal集成了所有的迁移和校验工具,实现工具的安装、启停、维护等能力,并实现了迁移任务的编排;DataKit平台集成迁移portal,提供UI界面,实现迁移全流程可视化,实现全场景“简单、完整、高效”的迁移。
迁移工具 | 工具简称 | 代码仓 | 说明 |
---|---|---|---|
全量迁移 | gs_mysync | https://gitee.com/opengauss/openGauss-tools-chameleon | 单个工具 |
增量迁移 | gs_replicate | https://gitee.com/opengauss/debezium | 单个工具 |
反向迁移 | gs_replicate | https://gitee.com/opengauss/debezium | 单个工具 |
数据校验 | gs_datacheck | https://gitee.com/opengauss/openGauss-tools-datachecker-performance | 单个工具 |
迁移portal | gs_rep_portal | https://gitee.com/opengauss/openGauss-migration-portal | 集成所有迁移和校验工具 |
迁移平台datakit | datakit | https://gitee.com/opengauss/openGauss-workbench | 集成迁移portal,提供UI界面 |