【DataKit系列】数据迁移-实例搭建步骤(二)
说明:此文档仅包含使用DataKit进行数据迁移时,搭建迁移任务相关教程,不包含一些必须的前置配置步骤,和环境要求等,请优先学习“【DataKit系列】数据迁移-使用说明(一)”文档。
数据迁移实例搭建步骤
1、离线模式迁移步骤
-
创建源端数据库用例,并初始化数据
详细说明,参考“迁移各步骤详细说明”目录下:“1 创建源端数据库用例,并初始化数据”,下同。
-
创建目标端数据库B库
详细说明:“2 创建目标端数据库B库”
-
使用B库连接openGauss数据库,并在目标端创建与mysql对象definer同名的用户,并赋权
详细说明:“3 在目标端创建与MySQL对象definer同名的用户,并赋权”
-
DataKit新增目标端和源端数据源
详细说明:“4 DataKit新增目标端和源端数据源”
-
创建迁移任务
详细说明:“5 创建迁移任务步骤”
-
启动迁移任务,查看任务详情
详细说明:“6 启动迁移任务,查看任务详情”
-
解决前置校验失败
详细说明:“7 解决前置校验失败”
-
重置迁移任务, 查看任务详情
详细说明:“8 重置迁移任务, 查看任务详情”
-
等待迁移任务完成,手动校验迁移结果
详细说明:“9 校验全量迁移结果”
2、在线模式迁移步骤
-
创建源端数据库用例,并初始化数据
同离线模式步骤
-
创建目标端数据库B库
同离线模式步骤
-
使用B库连接openGauss数据库,并在目标端创建与mysql对象definer同名的用户,并赋权
同离线模式步骤
-
DataKit新增目标端和源端数据源
同离线模式步骤
-
创建迁移任务
同离线模式步骤
-
启动迁移任务,查看任务详情
同离线模式步骤
-
解决前置校验失败
同离线模式步骤
-
重置迁移任务, 查看任务详情
同离线模式步骤
-
校验全量迁移结果
同离线模式“校验迁移结果”步骤
-
修改源端数据库数据,校验增量迁移结果
详细说明:“10 修改源端数据库数据,校验增量迁移结果”
-
结束增量迁移,启动反向迁移
详细说明:“11 结束增量迁移,启动反向迁移”
-
修改目标端数据库数据,检验反向迁移结果
详细说明:“12 修改目标端数据库数据,检验反向迁移结果”
-
结束迁移任务
-
详细说明:“13 结束在线模式迁移任务”
迁移各步骤详细说明
1、创建源端数据库用例,并初始化数据
连接MySQL数据库,并执行如下sql语句,在源端创建source_db数据库,作为迁移的源端数据库用例。
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;
2、创建目标端数据库B库
连接openGauss数据库,并执行如下sql语句,创建B库。
create database target_db with dbcompatibility = 'b';
3、在目标端创建与MySQL对象definer同名的用户,并赋权
当源端数据库中有视图(view),触发器(trigger)或存储过程(procedure)的对象时,需要在目标端创建与其对象definer同名的用户。
查询MySQL端对象definer
-- 查询MySQL对象definer的sql语句
show create view view1;
查询结果类似如下:
View Create View character_set_client collation_connection
view1 CREATE ALGORITHM=UNDEFINED DEFINER=`test`@`%` SQL SECURITY DEFINER VIEW `view1` AS select `table1`.`id` AS `id`,`table1`.`name` AS `name`,`table1`.`col` AS `col` from `table1` utf8mb3 utf8mb3_general_ci
其中:“'test'@'%'
”即为MySQL对象definer
使用B库连接openGauss数据库
-- 通过gsql连接B库
gsql -d target_db -p 5680 -r
-- 或,在gsql已连接情况下切换至B库
\c target_db
在目标端创建与mysql对象definer同名的用户,并赋权
-- 创建与mysql对象definer同名的用户,并赋权的sql语句
-- 设置b_compatibility_user_host_auth参数值为on
set b_compatibility_user_host_auth to on;
-- 创建同名用户
create user 'username'@'%' with password 'Sample@123';
-- 给新增用户赋权
grant all privileges to 'username'@'%';
4、DataKit新增目标端和源端数据源
请按照如下步骤,分别添加源端MySQL数据源和目标端openGauss数据源。
-
访问DataKit服务,点击进入“资源中心->实例管理”目录下
-
点击“创建”按钮,弹出“新增数据源”窗口
-
进行新增数据源配置
-
集群名称可忽略,也可自定义
-
数据库类型选择“MYSQL”或“OPENGAUSS”
-
准确配置数据库服务的ip地址,端口,用户名,密码信息
-
连接拓展属性,及使用jdbc连接数据库服务时,做的一些时区,字符集限制等,可忽略
-
连接地址,即通过上述配置的连接信息拼出的jdbc连接数据库的url
-
-
配置完成后,点击“测试连通性”
-
“待检测”显示为“可用”,说明可以成功建立连接
-
“待检测”显示为“不可用”,说明存在网络问题,或配置信息有误,请校验后重试。
-
-
“测试连通性”可用后,点击“确认”按钮,成功添加数据库实例
5、创建迁移任务步骤
-
Datakit成功加载data-migration插件
-
点击进入DataKit服务“数据迁移 -> 迁移任务中心”目录下
-
点击“创建数据迁移任务”按钮
-
开始“选择迁移源库和目的库”步骤
注:
-
如果无数据源,点击“新增数据源”,输入所需参数进行新增,或参考目录“4 DataKit新增目标端和源端数据源”。
-
目的端选择目录“2 创建目标端数据库B库”已创建好的B库。
-
迁移过程模式,支持在线模式和离线模式。
离线模式:自动执行全量迁移 + 全量校验,完成后自动结束。
在线模式:可执行全量迁移 + 全量校验 + 增量迁移 + 增量校验 + 反向迁移。其中portal自动执行全量迁移 + 全量校验 + 增量迁移 + 增量校验,然后一直处于增量迁移状态(此时增量迁移和增量校验同时运行)。用户需要手动停止增量迁移,然后手动启动反向迁移,此后一直处于反向迁移状态。如果需要结束任务,需要用户手动结束迁移。
-
选择源端数据库(MySQL端),选择目的端数据库(openGauss端),并点击“添加子任务”按钮,支持添加多条子任务。
-
成功添加子任务后,在页面下方选择对应子任务的“迁移过程模式”,支持选择“在线模式”和“离线模式”。
-
“选择迁移源库和目的库”配置成功,点击下一步。
-
-
开始“配置迁移过程参数”步骤
直接使用默认参数即可,点击“下一步”。
-
开始“分配执行机资源”步骤
页面会展示所有的执行机列表信息,页面左侧复选框,勾选一台已安装迁移套件(portal)的执行机,点击完成,创建迁移任务成功。
注:
-
执行机,是指安装有portal(portal时具体执行迁移任务的插件)的服务器。即,迁移任务实际上是在安装portal的服务器上,使用portal插件执行的,DataKit这里只是作为一个集中管理迁移任务的客户端。
-
如果没有已安装迁移套件的执行机,详细见文档“【DataKit系列】数据迁移-使用说明(一)”中,目录:“DataKit安装Portal教程”。
-
-
查看迁移任务
点击进入目录“数据迁移 -> 迁移任务中心”下,可以看到已创建成功的迁移任务列表信息。
-
修改迁移任务配置
迁移任务列表中,字段“执行状态”为未启动的任务,点击对应数据行右侧“详请”,可以看到上述“创建迁移任务步骤”的过程配置信息,并支持修改配置。
6、启动迁移任务,查看任务详情
-
点击进入DataKit服务“数据迁移 -> 迁移任务中心”目录下
-
找到上述创建的迁移任务记录,点击记录右侧的“启动”,迁移任务启动成功
-
点击记录右侧的“详情”,进入迁移任务详情页
-
点击对应子任务右侧的“详情”,可查看子任务迁移的详细过程数据
-
“在线/离线迁移过程记录”中,会展示详细的迁移情况
-
其中全量迁移会展示表,视图,函数,触发器和存储过程的迁移情况,迁移状态为绿色“√”图标时,说明迁移成功,为橙色“×”图标时,说明迁移失败。
-
全量校验则只校验拥有主键的表,同样校验状态为绿色“√”图标时,说明迁移成功,为橙色“×”图标时,说明校验失败。
-
当存在失败的情况时,点击对应子任务右侧的“日志”,可以选择下载所需日志,查看日志中的报错信息并解决。
7、解决前置校验失败
如果未出现“前置校验失败”的状态,则不需要解决,跳过此步骤即可。
当出现前置校验失败时,鼠标悬浮于对应子任务“前置校验失败”提示的右侧橙色“×”图标上,即可查看校验失败的详细信息,根据详细信息中提示的校验失败项,参考文档“DataKit数据迁移-3前置校验失败的处理”,对失败项进行解决。
8、重置迁移任务, 查看任务详情
如果未出现“前置校验失败”的状态,则不需要此操作,跳过此步骤即可。
当解决完成“前置校验失败”的项目后,在页面的标签页栏中关闭此任务的“任务详情”页面,点击回到“迁移任务中心”页面,找到对应迁移任务记录,点击对应页面右侧的“结束迁移”,然后点击“重置”,再点击“启动”,重新启动此迁移任务,再次点击“详情”,即可查看迁移任务详细的过程信息。
9、校验全量迁移结果
当离线模式迁移任务完成,或在线模式全量校验完成后,可以手动连接到迁移的目标端数据库,通过如下sql语句,手动查看并校验库中数据是否于源端数据库中数据相同。
-- 使用B库连接openGauss数据库
gsql -d target_db -p 5680 -r
-- 或在已连接的情况下,切换到目标端B库
\c target_db
-- 设置默认的schema
SET CURRENT_SCHEMA TO source_db;
-- 查看表格和视图
SHOW TABLES;
-- 查询触发器
SHOW TRIGGERS;
-- 查看函数
SHOW FUNCTION STATUS WHERE Db = 'source_db';
-- 查看存储过程
SHOW PROCEDURE STATUS WHERE Db = 'source_db';
-- 查询表中数据
SELECT * FROM table1;
注:此处设置默认的schema,是由于数据迁移会默认在目标端数据库中创建与源端数据库同名的的schema,并将源端数据库中的数据迁移到此schema中。
10、修改源端数据库数据,校验增量迁移结果
在源端依次执行增删改和创建表格等操作,可以查看对应迁移任务详情中,“累计增量迁移对象数”会随着操作逐次增加,当“剩余待写入数据”条数为0时,说明所有数据库操作均已增量迁移成功。
也可以每次源端做出操作后,在目标端手动校验数据是否同步,以验证增量迁移情况。
修改源端数据库数据
-- 增删改操作
-- 插入数据
INSERT INTO table1 VALUES(7, 'data', 'data7');
-- 修改数据
UPDATE table1 SET NAME = 'new_data' WHERE id = 7;
-- 删除数据
DELETE FROM table1 WHERE id = 7;
-- DDL操作
-- 创建表
CREATE TABLE table2 (id INT, NAME VARCHAR(10)
);
-- 删除表
DROP TABLE table2;
手动校验增量迁移结果
-- 增删改操作校验
-- 查询表中修改的数据是否同步
select * from table1;
-- DDL操作校验
-- 查询目标端表格的增删情况
SHOW TABLES;
-- 查询目标端表结构,与新增表结构是否一致
SHOW CREATE TABLE table2;
11、结束增量迁移,启动反向迁移
点击对应子任务右侧的“停止增量”,点击“确认”按钮,等待增量迁移停止。
增量迁移成功停止后,对应子任务右侧的“启动反向”,点击查看详情,可以查看反向迁移详细过程。
12、修改目标端数据库数据,检验反向迁移结果
在目标端依次执行增删改操作,可以查看对应迁移任务详情中,“累计反向迁移对象数”会随着操作逐次增加,当“剩余待写入数据”条数为0时,说明所有数据库操作均已反向迁移成功。
也可以每次目标端做出操作后,在源端手动校验数据是否同步,以验证反向迁移情况。
修改目标端数据库数据
-- 增删改操作
-- 插入数据
INSERT INTO table1 VALUES(7, 'data', 'data7');
-- 修改数据
UPDATE table1 SET NAME = 'new_data' WHERE id = 7;
-- 删除数据
DELETE FROM table1 WHERE id = 7;
手动校验反向迁移结果
-- 增删改操作校验
-- 依次查询修改是否同步
select * from table1;
13、结束在线模式迁移任务
在线模式迁移任务不同与离线模式,当不手动进行停止操作时,会始终处于反向迁移状态下。
点击对应子任务右侧“结束迁移”,等待迁移任务停止,则此在线模式迁移任务完成。
- END -
相关文章:

【DataKit系列】数据迁移-实例搭建步骤(二)
说明:此文档仅包含使用DataKit进行数据迁移时,搭建迁移任务相关教程,不包含一些必须的前置配置步骤,和环境要求等,请优先学习“【DataKit系列】数据迁移-使用说明(一)”文档。 数据迁移实例搭建…...

发送jsonp请求(前后端如何实现)
发送jsonp请求(前后端如何实现) 前端 $.ajax({url: /api/jsonp,type: get,data: { id: 123 }, // 参数dataType: jsonp,jsonp: cb, // 回调函数的参数名jsonpCallback: successfn,// 回调函数contentType: "application/json; charsetutf-8",success: function(resp…...

Leetcode—1239. 串联字符串的最大长度【中等】(unordered_set)
2024每日刷题(155) Leetcode—1239. 串联字符串的最大长度 实现代码 class Solution { public:bool charSet(string & s) {unordered_set<char> charSet(s.begin(), s.end());// true表示有重复// false表示唯一return s.size() ! charSet.s…...

Spring Boot 3.x Rest API统一异常处理最佳实践
上一篇:Spring Boot 3.x Rest API最佳实践之统一响应结构 下一篇:Spring Boot 3.x Web单元测试最佳实践 参考著作:Error Handling for REST with Spring 在Spring MVC应用中,要对web表示层所抛出的异常进行捕获处理有多种方式&…...

线程的进阶学习
线程结束方式: 1.pthread_exit //pthread_join 2.从线程执行函数中return //此时效果等价于pthread_exit 3.pthread_cancel //线程可以被取消 4.任何一个线程调用了exit 或者 主线程 (main函数) return都会造成 进程结束 线程资源回收 ---pthread_join int pthread_ca…...

13.1 Python 正则表达式基础
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…...

贪心算法介绍(Greedy Algorithm)
贪心算法介绍(Greedy Algorithm) 1. 贪心算法概念简介 贪心算法Greedy Algorithm是一种在每一步选择中都采取当前状态下最优(或最有利)决策的算法策略,以期望通过这样的局部最优决策达到全局最优解。它适用于那些…...

谷粒商城实战笔记-175~177-商城业务-检索服务-检索查询接口开发
文章目录 一,175-商城业务-检索服务-检索查询参数模型分析抽取二,176-商城业务-检索服务-检索返回结果模型分析抽取三,177-商城业务-检索服务-检索DSL测试-查询部分四,178-商城业务-检索服务-检索DSL测试-聚合部分问题记录解决方案…...

爬虫 Web Js 逆向:RPC 远程调用获取加密参数(1)WebSocket 协议介绍
RPC (Remote Procedure Call) 是远程调用的意思。 在 Js 逆向时,本地可以和浏览器以服务端和客户端的形式通过 WebSocket 协议进行 RPC 通信,这样可以直接调用浏览器中的一些函数方法,不必去在意函数具体的执行逻辑,可以省去大量…...

【安卓】WebView的用法与HTTP访问网络
文章目录 WebView的用法使用http访问网络使用HttpURLConnection使用OkHttp 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。 WebView的用法 新建一个WebViewTest项目,然后修…...

Mysql中文存入乱码???
问题描述 提示:用的mysql5.x版本: 例如:在新增数据的时候,数据库本应该保存中文的字段出现了乱码???: 原因分析: 提示:首先想到的是mysql的字符集设置&…...

安美数字酒店宽带运营系统 weather.php 任意文件读取漏洞复现
0x01 产品简介 HiBOS酒店宽带运营系统是由安美世纪(北京)科技有限公司开发的一套专为酒店设计的宽带管理系统。该系统旨在提升酒店宽带服务的运营效率和安全性,为酒店客人提供稳定、高速、便捷的上网体验。 0x02 漏洞概述 安美数字酒店宽带运营系统 weather.php …...

BGP的反射器(四)
解决IBGP全互联问题带来的问题: 路由器需维护大量的TCP和BGP连接,尤其在路由器数量较多时AS内BGP网络的可扩展性较差 角色 RR:路由反射器Client:RR的客户端Non-Client:非客户机 关系 Client只与RR之间建立IBGP会话…...

proxy负载均衡
endpoint : 终点、终端 看service服务器的ip kubectl get ep backend -> real server :真正提供web服务的服务器 负载均衡器 load balancer --》LB USER -->LB --->BACKEND(real server) nginx SERVICE --->很多的endpoint--》po…...

两个若依系统,不能同时登录问题解决方案
原因: 问题根源在于两个独立的系统(A系统与B系统)共享了同一cookie键名来存储各自用户的认证令牌(token)。这种设计导致了以下情形: 当用户在A系统登录后,一个token被存储在cookie中࿰…...

Unity Render Streaming项目实践经验
UnityRenderStreaming项目 项目github地址见上,我使用项目的3.1.0-exp.7版本、Unity 2023.1.0版本、windows11运行。 1下载项目包 2在Unity Hub中打开RenderStreaming~文件夹 3在package manager中导入com.unity.renderstreaming package 因为已经下载过了就选择install pa…...

Rvt/dgn格式的模型如何提取外轮廓,用于压平倾斜模型或者地形,进行BIM+GIS融合
0序 很多设计院、施工单位都需要做BIMGIS的融合,把设计成果或者施工方案和现状实景做叠加。 BIM作为设计模型和现状的实景是不吻合的,多数都需要在现状的基础上进行改造,穿过村落的桥梁,已有立交的跨域等。为了更好的展示设计方案…...

sqli-labs-master靶场通关
目录 一、sqli-labs第一关 1.判断是否存在sql注入 (1)提示输入数字值的ID作为参数,输入?id1 (2)通过数字值不同返回的内容也不同,所以我们输入的内容是带入到数据库里面查询了 (3࿰…...

hive sql 处理多层 json 数组
1. 背景 json 字符串值数据示例: {"score": 1,"submitTime": 1712491933,"answerFlag": 1,"groupId": 1755547960,"answers": [{"value": "[1, 2, 3]","ids": [4,5,6],"is…...

Dom 元素转换 Image 图片 (截图)
Dom 元素转换 Image 图片 (截图) dom-to-image dom-to-image NPM 官网文档 参考文章码上行舟 dom-to-image 是如何将 html 转换成图片的(文章参考) 安装 npm install dom-to-image --save 使用 /* in ES 6 */ import domtoimage from "dom-to-image"; /* in ES 5 *…...

零售业务产品系统应用架构设计(二)
ETC信用结算系统根据《加快推进高速公路电子不停车快捷收费应用服务实施方案》(发改基础〔2019〕935号),拓宽ETC发行服务渠道。推动建立全网协同服务模式,完善服务规则,鼓励银行业金融机构、非银行支付机构和互联网企业等服务机构紧密合作。允许ETC绑定既有银行账户和支付…...

Linux速成入门教程——从零基础开始快速入门,一文了解Linux用户管理与权限
2.1 用户与组管理 用户与组的基本概念 在Linux系统中,用户和组是管理权限和资源访问的基本单元。每个用户都有一个唯一的用户ID(UID),每个组都有一个唯一的组ID(GID)。用户可以属于一个或多个组ÿ…...

网工内推 | 宁德时代IT运维,晋升空间大,带薪年假,包吃包住
01 宁德时代 🔷招聘岗位:IT运维服务 🔷任职要求 1、大专及以上学历专业不限,应届毕业生或计算机、网络维护等相关专业优先; 2、具备较强的服务意识和良好的语言表达能力、沟通能力、记忆能力、心理承受能力和学习能力…...

Linux---系统安全
文章目录 系统安全系统账号清理密码安全控制命令历史限制终端自动注销如设置时间短的处理方式 使用su命令切换用户用途及用法密码验证限制使用su命令的用户查看su操作记录限制使用su命令的用户查看su操作记录su命令的安全隐患 PAM(Pluggable Authentication Modules)可插拔式认…...

手写数字识别实战
全部代码: import matplotlib.pyplot import torch from torch import nn # nn是完成神经网络相关的一些工作 from torch.nn import functional as F # functional是常用的一些函数 from torch import optim # 优化的工具包import torchvision from matplotlib …...

二叉树遍历
二叉树的遍历是二叉树操作中的一个基本且重要的概念,它指的是按照一定的规则访问二叉树中的每个节点,并且每个节点仅被访问一次。常见的二叉树遍历方式有四种:前序遍历(Pre-order Traversal)、中序遍历(In-…...

uni app 调用前置摄像头
uniapp开发app并没有相关Api调用前置摄像头。只能使用5app的api 调用前置摄像头拍照 plus.camera.getCamera(index) 获取需要操作的摄像头对象,如果要进行拍照或摄像操作,需先通过此方法获取摄像头对象 index指定要获取摄像头的索引值,1表…...

哈工大李治军老师OS课程笔记(4)——内存管理
一 内存使用与分段(实验六) 内存是如何用起来的? 内存使用:将程序放在内存中,PC指向开始地址 重定位:修改程序中的地址(是相对地址) 什么时候完成重定位? 编译时加基址…...

代码随想录算法训练营第43天:动态规划part10:子序列问题
300.最长递增子序列 力扣题目链接(opens new window) 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2…...

传智教育引通义灵码进课堂,为技术人才教育学习提效
7 月 17 日,阿里云与传智教育在阿里巴巴云谷园区签署合作协议,双方将基于阿里云智能编程助手通义灵码在课程共建、品牌合作及产教融合等多个领域展开合作,共同推进 AI 教育及相关业务的发展,致力于培养适应未来社会需求的高素质技…...