Shardingsphere-Proxy 5.5.0数据迁移
Shardingsphere-Proxy 5.5.0数据迁移
- Shardingsphere系列目录:
- 背景
- 配置集群部署
- 搭建Zookeeper
- 修改shardingsphere-proxy配置
- 重启shardingsphere-proxy
- 执行数据迁移
- 连接代理数据库实例(Navicate)
- 应用代理数据库
- 注册目标分片数据库存储单元
- 注销目标分片数据库存储单元
- 创建分库分表规则
- 删除规则
- 注册源数据库存储单元
- 注销源数据库存储单元
- 执行迁移任务
- 查询数据迁移任务列表
- 查询指定任务id的状态
- 提交任务
- 数据迁移执行 DistSQL 脚本实战
Shardingsphere系列目录:
【Springboot 集成 Shardingsphere-JDBC】
【Shardingsphere-Proxy 5.5.0部署】
【Shardingsphere-Proxy 5.5.0数据迁移】
背景
继上一篇【Shardingsphere-Proxy 5.5.0部署】 部署完了Shardingsphere-Proxy,方便在线下查询数据;但是分库分表实现了,但是老数据怎么办,难道还让那4000w+的数据待在那里不动?这样不就造成数据倾斜了吗?所以咱们需要将原先的老数据按照分库分表规则迁移到分片表。
配置集群部署
原先咱们之前部署的shardingsphere-proxy是单机模式(Standalone),但是数据迁移的前提就是需要部署集群模式(Cluster)的shardingsphere-proxy,这个也不难,做以下三步即可:
- 搭建Zookeeper
- 修改shardingsphere-proxy配置为集群模式
- 重启shardingsphere-proxy
搭建Zookeeper
按照【Zookeeper部署】 步骤安装。
修改shardingsphere-proxy配置
在原global.yaml配置基础上,新增配置如下:
mode:# 集群模式type: Clusterrepository:# 持久化仓库类型type: ZooKeeper# 持久化仓库所需属性props:# 注册中心命名空间namespace: governance_ds# 注册中心连接地址(zookeeper的客户端连接端口)server-lists: localhost:2181
以上配置中的namespace可借鉴【Zookeeper部署】中对namespace的配置,其中namespace列表中的元素可选一个填写到此处。
重启shardingsphere-proxy
进入【bin】目录,执行关闭指令:
./stop.sh
进入【bin】目录,执行启动指令:
./start.sh
执行数据迁移
连接代理数据库实例(Navicate)
借鉴【Shardingsphere-Proxy 5.5.0部署】中的Navicate连接代理数据库方法。
应用代理数据库
use sharding_test_db;
注册目标分片数据库存储单元
REGISTER STORAGE UNIT target_test_0 (URL="jdbc:mysql://localhost:3306/test_db_0?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true",USER="root",PASSWORD="123456"
);
REGISTER STORAGE UNIT target_test_1 (URL="jdbc:mysql://localhost:3306/test_db_1?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true",USER="root",PASSWORD="123456"
);
注销目标分片数据库存储单元
如果存储单元有修改,可以注销后重新注册。
UNREGISTER STORAGE UNIT IF EXISTS 目标存储单元别名;
例:UNREGISTER STORAGE UNIT IF EXISTS target_tss_1;
注意:注销之前要将已经创建的分库分表规则先删除
创建分库分表规则
规则名是proxy代理数据库汇聚的表名
CREATE SHARDING TABLE RULE test_table(DATANODES("target_tss_${0..1}.test_table_${1..31}"),DATABASE_STRATEGY(TYPE="standard",SHARDING_COLUMN=id,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="target_tss_${id % 2}")))), TABLE_STRATEGY(TYPE="standard",SHARDING_COLUMN=stat_date,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="test_table_$->{Integer.parseInt(stat_date.toString().substring(8))}")))),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME="snowflake"))
);
sql讲解:
DATABASE_STRATEGY:数据库分片策略(按照id字段取模分片)
TABLE_STRATEGY:表分片策略(按照stat_date字段yyyy-MM-dd时间格式的最后两位并转数字作为分片表后缀)
KEY_GENERATE_STRATEGY:主键生成策略(雪花算法)
这个例子是标准分片的一个例子,可以借鉴【shardingsphere官网】看其他的分片类型例子。
删除规则
如果规则有修改,可以删除后重新添加。有修改语法,但是我感觉先删后增更方便。
DROP SHARDING TABLE RULE IF EXISTS 规则别名;
例:DROP SHARDING TABLE RULE IF EXISTS test_table;
注册源数据库存储单元
REGISTER MIGRATION SOURCE STORAGE UNIT source_tss (URL="jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC&useSSL=false",USER="root",PASSWORD="123456",PROPERTIES("minPoolSize"="1","maxPoolSize"="20","idleTimeout"="60000")
);
注销源数据库存储单元
如果存储单元有修改,可以注销后重新注册。
UNREGISTER MIGRATION SOURCE STORAGE UNIT 存储单元别名;
例:UNREGISTER MIGRATION SOURCE STORAGE UNIT source_tss;
执行迁移任务
MIGRATE TABLE 源数据库存储单元别名.源表名 INTO 分库分表汇聚表名;
例:MIGRATE TABLE source_tss.test_table INTO test_table;
注意:【执行迁移任务】操作后,【提交任务】操作前,这个任务会持续执行,对于【存量数据】以及【增量数据】都会迁移到目标分片表。
查询数据迁移任务列表
可查询任务id
SHOW MIGRATION LIST;
查询指定任务id的状态
SHOW MIGRATION STATUS '任务id';
提交任务
COMMIT MIGRATION '任务id';
注意:
- 同一个表执行的迁移任务id相同,如果想多次执行同一个表的迁移任务,需要【提交任务】提交完之后可循环执行
- 【执行迁移任务】目标表需要为空,报错信息可在【查询指定任务id的状态】列表的【error_message】字段查看
- 集群模式修改配置文件中的表分片逻辑后可能会无效,因为有缓存的缘故,我的做法是把zookeeper和shardingsphere-proxy重启就可以了。
数据迁移执行 DistSQL 脚本实战
-- 1. 应用代理数据库
use sharding_test_db;-- 2. 注册目标数据库存储单元
REGISTER STORAGE UNIT target_test_0 (URL="jdbc:mysql://localhost:3306/test_db_0?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true",USER="root",PASSWORD="123456"
);
REGISTER STORAGE UNIT target_test_1 (URL="jdbc:mysql://localhost:3306/test_db_1?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true",USER="root",PASSWORD="123456"
);-- 3. 创建规则(规则名是proxy代理数据库汇聚的表名)(表规则取yyyy-MM-dd后两位并转数字最为分片表后缀)
CREATE SHARDING TABLE RULE test_table(DATANODES("target_tss_${0..1}.test_table_${1..31}"),DATABASE_STRATEGY(TYPE="standard",SHARDING_COLUMN=id,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="target_tss_${id % 2}")))), TABLE_STRATEGY(TYPE="standard",SHARDING_COLUMN=stat_date,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="test_table_$->{Integer.parseInt(stat_date.toString().substring(8))}")))),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME="snowflake"))
);-- 4. 注册源数据库存储单元
REGISTER MIGRATION SOURCE STORAGE UNIT source_tss (URL="jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC&useSSL=false",USER="root",PASSWORD="123456",PROPERTIES("minPoolSize"="1","maxPoolSize"="20","idleTimeout"="60000")
);-- 5. 执行迁移任务
MIGRATE TABLE source_tss.test_table INTO test_table;-- 6. 展示数据迁移任务列表
SHOW MIGRATION LIST;-- 7. 查询指定任务id的状态
SHOW MIGRATION STATUS 'j0102p00004fbcfe6b4dc23af37e3cdb06a4c634ed';-- 8. 提交任务
COMMIT MIGRATION 'j0102p00004fbcfe6b4dc23af37e3cdb06a4c634ed';
相关文章:

Shardingsphere-Proxy 5.5.0数据迁移
Shardingsphere-Proxy 5.5.0数据迁移 Shardingsphere系列目录:背景配置集群部署搭建Zookeeper修改shardingsphere-proxy配置重启shardingsphere-proxy 执行数据迁移连接代理数据库实例(Navicate)应用代理数据库注册目标分片数据库存储单元注销…...
c语言中的for循环
在C语言中,for循环是控制结构之一,用于多次执行一段代码。其具体用法如下: 语法 for (初始化表达式; 条件表达式; 更新表达式) {// 循环体 }参数说明 初始化表达式:在循环开始前执行一次,用于初始化循环控制变量。条…...
大模型微调(finetune)方法
lora adapter prefix-tuning p-tuning prompt-tuning 大模型微调后灾难行遗忘 1、主流解决大模型微调后灾难行遗忘的方法是在微调过程中加入通用的指令数据。 2、自我蒸馏方法主要是通过模型本身对任务数据进行生成引导,构建自我蒸馏数据集,改变任务数…...
Bootstrap 5 卡片
Bootstrap 5 卡片 Bootstrap 5 是一个流行的前端框架,它提供了一套丰富的组件和工具,用于快速开发响应式和移动设备优先的网页。在 Bootstrap 5 中,卡片(Card)是一个非常重要的组件,用于展示内容,如文本、图片、列表等。卡片组件具有高度的灵活性和可定制性,可以轻松地…...

【ONLYOFFICE 8.1】的安装与使用——功能全面的 PDF 编辑器、幻灯片版式、优化电子表格的协作
🔥 个人主页:空白诗 文章目录 一、引言二、ONLYOFFICE 简介三、安装1. Windows/Mac 安装2. 文档开发者版安装安装前准备使用 Docker 安装使用 Linux 发行版安装配置 ONLYOFFICE 文档开发者版集成和开发 四、使用1. 功能全面的 PDF 编辑器PDF 查看和导航P…...

「51媒体」浙江地区媒体邀约
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传加速季,100万补贴享不停,一手媒体资源,全国100城线下落地执行。详情请联系胡老师。 浙江地区的媒体邀约资源丰富多样,涵盖了电视台…...

2-18 基于matlab的关于联合对角化盲源分离算法的二阶盲识别(SOBI)算法
基于matlab的关于联合对角化盲源分离算法的二阶盲识别(SOBI)算法。通过联合对角化逼近解混矩阵。构建的四组信号,并通过认为设置添加噪声比例,掩盖信号信息。通过SOBI算法实现了解混。程序已调通,可直接运行。 2-18联合…...
C++中常用的标志库
标准库 C标准库是一个强大的工具集,它包含了一组丰富的类和函数,可以帮助开发者进行各种操作,如输入输出、字符串操作、数据结构管理、算法实现等。以下是一些常用的C标准库及其使用方法。 1. 输入输出库 <iostream> 用于标准输入输…...
近期计算机领域的热点技术
随着科技的飞速发展,计算机领域的新技术、新趋势层出不穷。本文将探讨近期计算机领域的几个热点技术趋势,并对它们进行简要的分析和展望。 一、人工智能与机器学习 人工智能(AI)和机器学习(ML)是近年来计算…...

HarmonyOS Next 系列之可移动悬浮按钮实现(六)
系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现(一) HarmonyOS Next 系列之验证码输入组件实现(二) HarmonyOS Next 系列之底部标签栏TabBar实现(三) HarmonyOS Next 系列之HTTP请求封装和Token…...

如何获得更高质量的回答-chatgpt
在与技术助手如ChatGPT进行交互时,提问的方式直接影响到你获得的答案质量。以下是几个关键的提问技巧,可以帮助你在与ChatGPT的互动中获得更有效的回答: 1. 清晰明了的问题 技巧:确保问题清晰明了,避免含糊不清或模糊的…...

ASP.NET Core 6.0 使用 Log4Net 和 Nlog日志中间件
前言 两年前,浅浅的学过 .NET 6,为啥要记录下来,大概是为了以后搭架子留下引线,还有抛砖引玉。 1. 环境准备 下载 建议使用 Visual Studio 2022 开发版 官网的下载地址:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具借助 Visual Studio 设计,具有自动完成…...
使用Spring Boot实现与ActiveMQ的消息队列集成
使用Spring Boot实现与ActiveMQ的消息队列集成 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 消息队列在现代分布式系统中扮演着至关重要的角色,…...

深度学习 - Transformer 组成详解
整体结构 1. 嵌入层(Embedding Layer) 生活中的例子:字典查找 想象你在读一本书,你不认识某个单词,于是你查阅字典。字典为每个单词提供了一个解释,帮助你理解这个单词的意思。嵌入层就像这个字典…...

ONLYOFFICE 8.1编辑器桌面应用程序来袭——在线全面测评
目录 ✈下载✈ 👀界面👀 👊功能👊 🧠幻灯片版式的重大改进🧠 ✂无缝切换文档编辑、审阅和查看模式✂ 🎵在演示文稿中播放视频和音频文件🎵 🤗版本 8.1:…...

《Windows API每日一练》6.4 程序测试
前面我们讨论了鼠标的一些基础知识,本节我们将通过一些实例来讲解鼠标消息的不同处理方式。 本节必须掌握的知识点: 第36练:鼠标击中测试1 第37练:鼠标击中测试2—增加键盘接口 第38练:鼠标击中测试3—子窗口 第39练&…...

[C#]基于opencvsharp实现15关键点人体姿态估计
数据集 正确选择数据集以对结果产生适当影响也是非常必要的。在此姿势检测中,模型在两个不同的数据集即COCO关键点数据集和MPII人类姿势数据集上进行了预训练。 1. COCO:COCO关键点数据集是一个多人2D姿势估计数据集,其中包含从Flickr收集的…...

lambda-map.merge
map.merge 结论: 1.当前传入的 key ,value biFunction 2.如果之前map不存在则直接put(当前key,当前value) 3.如果之前map已经有了,老value与 当前value 进入function处理后再 put(当前key,处理后的value)...

pppd 返回错误码 含义
错误码 00: pppd已经断开,或者已经成功建立连接后请求方又中 断了。 01: 发成了一个严重错误,例如系统调用失败或者访问非法内存。 02: 处理给定操作是检测到错误,例如使用两个互斥的操作。 03:…...
XML 技术
XML 技术 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。它由万维网联盟(W3C)开发,并在1998年成为正式标准。XML的设计目标是既易于人类阅读,也易于机器解析。它是一种自描述的语言,允许用户定义自己的标签和文档结构。XML被广泛应用于各种领域,包括网络服…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...