【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 *…...
ROS2新手必看:用turtlesim小乌龟快速入门机器人仿真(附完整安装指南)
ROS2实战入门:从turtlesim小乌龟探索机器人仿真世界 引言:为什么选择turtlesim作为ROS2的起点? 在机器人操作系统(ROS)的学习道路上,很多开发者都会遇到一个共同的困境:理论概念抽象难懂,而直接上手复杂项…...
FreeRTOS实战指南:从消息队列到内存管理,手把手解决嵌入式多任务难题
FreeRTOS实战指南:从消息队列到内存管理,手把手解决嵌入式多任务难题 1. 为什么嵌入式开发者需要FreeRTOS 在资源受限的嵌入式系统中,开发者常常面临这样的困境:既要处理实时性要求高的传感器数据采集,又要兼顾用户界面…...
使用PyTorch Lightning优化PETRV2-BEV模型训练流程
使用PyTorch Lightning优化PETRV2-BEV模型训练流程 如果你正在训练像PETRV2这样的BEV感知模型,可能已经体会过那种“一步一坑”的感觉。数据加载复杂、多GPU训练配置繁琐、日志记录混乱、实验难以复现……这些工程上的琐事,常常比模型本身更让人头疼。 …...
Web AR技术深度探秘:7个创新案例重构浏览器增强现实体验
Web AR技术深度探秘:7个创新案例重构浏览器增强现实体验 【免费下载链接】AR.js Image tracking, Location Based AR, Marker tracking. All on the Web. 项目地址: https://gitcode.com/gh_mirrors/arj/AR.js 你是一个文章写手,你负责为开源项目…...
OpenClaw自动化周报生成:Qwen3-32B私有镜像精准提取Git提交记录
OpenClaw自动化周报生成:Qwen3-32B私有镜像精准提取Git提交记录 1. 为什么需要自动化周报生成 每周五下午,我都会面临同样的困扰:需要从零散的Git提交记录中手动整理本周工作内容,再拼凑成一份结构化的周报。这个过程不仅耗时&a…...
高效安全:从远程服务器到本地Windows的文件传输全攻略
1. 远程桌面连接:最直观的文件传输方式 远程桌面连接(RDP)是Windows系统自带的"杀手级"功能,我帮客户部署项目时90%的场景都会用它传文件。它的优势在于操作可视化程度高,就像直接在服务器桌面上操作本地文件…...
刚刚,英伟达革了自己的命:智能体自主进化7天,干掉所有算子工程师、GPU专家
这应该是今天刚刚出炉的、最炸裂的文章。在很多算子开发的微信群组,已经掀起了轩然大波。「这或许是超人类智能在软件领域的真正首次展露。」英伟达许冰刚刚在 X 上发出了如此断言。他所评论的,正是他与 Terry Chen 和 Zhifan Ye 为共同一作的一项英伟达…...
flbook电子书下载神器!用这招把网页变PDF(Python+JS双解法)
从网页到PDF:PythonJS双引擎实现FlBook电子书高效归档方案 在数字阅读时代,电子书平台已成为获取知识的重要渠道,但许多优质内容往往缺乏便捷的下载选项。对于技术从业者和数字内容管理者而言,掌握将在线电子书转化为可离线保存的…...
告别混乱!用CANoe的arxml数据库高效管理车载网络信号(附Signal/PDU/Frame创建全流程)
告别混乱!用CANoe的arxml数据库高效管理车载网络信号(附Signal/PDU/Frame创建全流程) 当车载网络从简单的CAN总线发展到包含FlexRay、以太网等多协议混合架构时,工程师们面临的信号管理复杂度呈指数级增长。一个典型的域控制器项目…...
天理与上帝——东西情理的源初图腾
天理与上帝——东西情理的源初图腾---摘要东西方文明在情理结构的根本差异,可以追溯到各自的“源初图腾”——天理与上帝。本文基于AI元人文“自感痕迹论”的框架,将天理与上帝重新理解为两种不同的“源初痕迹”或“自感显影的定向模式”。天理是“天人合…...
