【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 *…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
