【OceanBase】四种不同的数据迁移方式

article/2025/8/19 2:44:56

前言

图片.png

OceanBase 已连续 9 年稳定支撑双 11,创新推出“三地五中心”城市级容灾新标准,在被誉为“数据库世界杯”的 TPC-C 和 TPC-H 测试上都刷新了世界纪录。自研一体化架构,兼顾分布式架构的扩展性与集中式架构的性能优势,用一套引擎同时支持 OLTP 和 OLAP 的混合负载,具备数据强一致、高扩展、高可用、高性价比、高度兼容 Oracle/MySQL、稳定可靠等特征,不断用技术降低企业使用数据库的门槛。现已助力金融、政府、运营商、零售、互联网等多个行业的客户实现核心系统升级。

一、数据迁移

数据迁移是日常运维操作的一种常见操作,是调整集群负载和机房搬迁的必备操作。虽然集群内部、表与表之间数据归档、磁盘水位均衡、资源单元搬迁等操作在 OceanBase 数据库中可以通过简单命令快速发起,但是涉及异构数据源和集群间的数据同步等功能时就需要借助外部工具。
图片.png

1.使用 SQL 脚本迁移

(2)介绍说明

使用SQL脚本主要还是针对表与表之前的数据迁移,这里重点就是表对表
表与表之间可以通过

INSERT INTO......SELECT 

语句实现数据同步。

(2)举例说明:

如果我们想要把A表数据插入B表中的话,代码如下:

INSERT INTO table_B
SELECT col1,col2 from table_A
WHERE [expr];

(3)资源单元迁移

#启动资源单元的迁移
ALTER SYSTEM MIGRATE
UNIT = [unit_id] DESTINATION = [ip_port]
#取消资源单元的迁移
obclient> ALTER SYSTEM CANCEL MIGRATE UNIT unit_id;

2.使用 mysqldump 迁移

图片.png

(1)介绍说明

mysqldump 是 MySQL 提供的用于导出 MySQL 数据库对象和数据的工具,非常方便。OceanBase 数据库兼容 MySQL 协议,您可以使用 mysqldump 对 OceanBase 数据库中的数据进行备份。mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是通过协议连接到数据库后,将需要备份的数据查询出来,并将查询出的数据转换成对应的 INSERT 语句。

(2)参数说明

参数说明
–host(-h)服务器 IP 地址。
–port(-P)服务器端口号。
–user(-u)MySQL 用户名。
–pasword(-p)MySQL 密码。
-d仅导出表结构不导出数据。
–databases指定要备份的数据库。
–all-databases备份所有数据库,不建议使用,建议单独指定。
–compact压缩模式,产生更少的输出。
–comments添加注释信息。
–complete-insert输出完成的插入语句。
–force忽略错误。
–skip-triggersOceanBase 数据库目前不支持 trigger 语法,所以如果不指定 --force 参数时必须要加上该参数,否则无法导出。
–skip-extended-insert导出语句为多条 INSERT 格式,否则为 INSERT INTO table VALUES(…),(…), 格式。

(3)使用 mysqldump 迁移 MySQL 表到 OceanBase

mysqldump -h 127.1 -u**** -P3306 -p**1***  -d TPCH --compact > tpch_ddl.sql
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `NATION` (`N_NATIONKEY` int(11) NOT NULL,`N_NAME` char(25) COLLATE utf8_unicode_ci NOT NULL,`N_REGIONKEY` int(11) NOT NULL,`N_COMMENT` varchar(152) COLLATE utf8_unicode_ci DEFAULT NULL,PRIMARY KEY (`N_NATIONKEY`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci MAX_ROWS=4294967295;MySQL [oceanbase]> set global foreign_key_checks=off;
Query OK, 0 rows affectedMySQL [oceanbase]> show global variables like '%foreign%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| foreign_key_checks | OFF   |
+--------------------+-------+
1 row in set

(4)导出指定数据库的表数据

mysqldump -h 127.1 -u**** -P3306 -p**1*** -t TPCH  > tpch_data.sql

mysqldump 导出的数据初始化 SQL 里会首先将表锁住,禁止其他会话写。然后使用 insert 写入数据。每个 insert 后面的 value 里会有很多值。这是批量 insert。

LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
INSERT INTO `t1` VALUES ('a'),('中');
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

3.使用 DataX 迁移

(1)介绍说明

DataX 是阿里巴巴集团内部广泛使用的离线数据同步工具/平台,它支持 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。基于 DataX 的同步机制,可以通过 OceanBase 数据库的 Reader 和 Writer 插件实现 OceanBase 数据库跨数据库、集群和异构数据库的数据迁移。

图片.png

(2)举例说明

将 MySQL 数据迁移到 OceanBase ,如果源端和目标端不能同时跟 DataX 服务器网络联通,那么可以通过 CSV 文件中转。如果源端数据库和目标端数据库能同时跟 DataX 所在服务器联通,则可以使用 DataX 直接将数据从源端迁移到目标端。

{"job": {"setting": {"speed": {"channel": 4 },"errorLimit": {"record": 0,"percentage": 0.1}},"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "tpcc","passwd": "********","column": ["*"],"connection": [{"table": ["bmsql_oorder"],"jdbcUrl": ["jdbc:mysql://127.0.0.1:3306/tpccdb?useUnicode=true&characterEncoding=utf8"]}]}},"writer": {"name": "oceanbasev10writer","parameter": {"obWriteMode": "insert","column": ["*"],"preSql": ["truncate table bmsql_oorder"],"connection": [{"jdbcUrl": "||_dsc_ob10_dsc_||obdemo:oboracle||_dsc_ob10_dsc_||jdbc:oceanbase://127.0.0.1:2883/tpcc?useLocalSessionState=true&allowBatch=true&allowMultiQueries=true&rewriteBatchedStatements=true","table": ["bmsql_oorder"]}],"username": "tpcc","passwd":"********","writerThreadCount":10,"batchSize": 1000,"memstoreThreshold": "0.9"}}}]}
}

(3)迁移数据

OceanBase 数据同步到 Oracle
配置文件如下:```unknow
{"job": {"setting": {"speed": {
"channel": 16 },"errorLimit": {
"record": 0,
"percentage": 0.1}},"content": [{
"reader": {"name": "oceanbasev10reader","parameter": {"where": "","readBatchSize": 10000,"column": ["*"],"connection": [{"jdbcUrl": ["||_dsc_ob10_dsc_||obdemo:oboracle||_dsc_ob10_dsc_||jdbc:oceanbase://127.0.0.1:2883/tpcc"],"table": ["bmsql_oorder"]}],"username": "tpcc","passwd":"********"}
},
"writer": {"name": "oraclewriter","parameter": {"username": "tpcc","passwd": "********","column": ["*"],"preSql": ["truncate table bmsql_oorder"],"batchSize": 512,"connection": [{"jdbcUrl": "jdbc:oracle:thin:@127.0.0.1:1521:helowin","table": ["bmsql_oorder"]}]}
}

4.使用 OUTFILE 语句迁移

(1)介绍说明

SELECT INTO OUTFILE 语句是 DBA 常用的一种数据导出方式。
与 mysqldump 对比, SELECT INTO OUTFILE 语句能够对需要导出的字段做出限制,这很好的满足了某些不需要导出主键字段的场景。再配合LOAD DATA INFILE 语句这将是一种很便利的数据导入导出方式。

(2)语法说明

SELECT [column_list] INTO  '/PATH/FILE' [TERMINATED BY OPTIONALLY] [ENCLOSED BY OPTIONALLY][ESCAPED BY OPTIONALLY][LINES TERMINATED BY OPTIONALLY][FROM  TABLENAME][WHERE condition][GROUP BY group_expression_list ][HAVING condition]][ORDER BY order_expression_list] 

(3)使用举例

obclient> SELECT * INTO OUTFILE '/tmp/demo01.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM student;

二、小结

数据库的国产化是很强的趋势,这对我们所有的技术人来说都是密不可分的,数据库的更换是对我们的数据迁移的过程是很强势的考验,但是数据掌握在自己手中,安全性便会大步提高,数据安全就是网络安全。


http://chatgpt.dhexx.cn/article/yVRNL1KW.shtml

相关文章

数据迁移介绍

数据迁移方案 数据迁移框架有几个比较有名应用比较广泛的开源项目:阿里datax,apache sqoop以及Pentaho kettle。这三个框架整体上工作原理类似,下面介绍阿里datax数据迁移框架。 对旧系统进行了重构,就需要把原来的数据迁移到新数…

代码技巧——数据迁移方案【建议收藏】

开发工作中,可能会遇到如"大表拆分"、"跨库数据迁移"等场景,本文介绍互联网常见架构下的数据迁移方案及实现; 1. 数据迁移的业务场景 以下是需要数据迁移的场景业务场景; 1.1 大表拆分 由于历史原因&…

【Pytorch】Label Smoothing

理论介绍可以参考 【Inception-v3】《Rethinking the Inception Architecture for Computer Vision》 中的 4.5 Model Regularization via Label Smoothing 本质就是用右边(意会下就行)的标签替换左边的 one-hot 编码形式,让网络别那么愤青&…

关于label smoothing(标签平滑)

目的: label smoothing常用于分类任务,防止模型在训练中过拟合,提高模型的泛化能力。 意义: 对于分类问题,我们通常使用one-hot编码,“非黑即白”,标签向量的目标类别概率为1,非目标…

【AI面试】hard label与soft label,Label Smoothing Loss 和 Smooth L1 Loss

往期文章: AI/CV面试,直达目录汇总【AI面试】NMS 与 Soft NMS 的辨析【AI面试】L1 loss、L2 loss和Smooth L1 Loss,L1正则化和L2正则化在一次询问chatGPT时候,在他的回答中,由smooth L1联想提到了Label Smoothing Loss 。我把问题贴到下面,和chatGPT的回答,供你参考。不…

标签平滑(label smoothing)

目录 1.标签平滑主要解决什么问题? 2.标签平滑是怎么操作的? 3.标签平滑公式 4.代码实现 标签平滑(label smoothing)出自GoogleNet v3 关于one-hot编码的详细知识请见:One-hot编码 1.标签平滑主要解决什么问题&…

指数平滑法 Exponential Smoothing

指数平滑法 Exponential Smoothing 指数平滑法,用于中短期经济发展趋势预测。 1 时间序列分析基础知识 1.1 时间序列分析前提假设 时间序列分析一般假设我们获得的数据在时域上具有一定的相互依赖关系,例如股票价格在t时刻很高,那么在t1时…

label smoothing(标签平滑)

label smoothing是一种在分类问题中,防止过拟合的方法。 label smoothing(标签平滑) 交叉熵损失函数在多分类任务中存在的问题label smoothing(标签平滑)参考资料 交叉熵损失函数在多分类任务中存在的问题 多分类任务…

When Does Label Smoothing Help?

原文链接:When Does Label Smoothing Help? Hinton老师的这篇paper,解释了标签平滑策略在什么情况下是有效的? 摘要 通过从hard targets加权平均得到的soft targets,可以显著提升多分类神经网络的泛化性和训练速度。这种标签平…

【NLP基础理论】02 N-grams语言模型和Smoothing

注: Unimelb Comp90042 NLP笔记 相关tutorial代码链接 N-grams Language Model (N-grams语言模型) 目录 N-grams Language Model (N-grams语言模型)1.1 Deriving n-gram language models(推导&#xff0…

Good-Turning Smoothing介绍及推理

在介绍Good-Turning Smoothing之前,我们可以先看一个有趣的例子: 假设你在钓鱼,已经抓到了18只鱼: 10条鲤鱼,3条黑鱼,2条刀鱼,1条鲨鱼,1条草鱼,1条鳗鱼… Q1:…

关于label smoothing的理解

背景介绍 提到label smoothing(标签平滑),首先介绍一下什么是hard label和soft label. 简单来说,hard label就是非1即0,不存在既可能是A也可能是B的情况,soft label则不同,它并不要求所有的“精…

Label-Smoothing

论文:Rethinking the Inception Architecture for Computer Vision 个人理解: 就是让softmax不那么相信某一类的数据,增强泛化性。主要操作就是,在制作标签的时候,属于那一类就让网络90%相信他,其他…

MATLAB Smoothing Spline 拟合

参考 The Elements of Statistical Learning (chapter 5.4) MATLAB - Smoothing Splines MATLAB - fit 1. 基础 Smoothing Spline 可以用于离散数据的函数拟合。考虑下面的问题:在所有存在二阶连续导数的函数中寻找拟合函数 f ( x ) f(x) f(x),可以使…

Label Smoothing分析

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 作者丨王峰知乎 来源丨https://zhuanlan.zhihu.com/p/302843504 编辑丨极市平台 转自 | 极市平台 导读 Label Smoothing在图像识别中能稳定涨点,但在人脸的…

label smoothing

label smoothing 背景:当我们将交叉熵损失函数用于分类任务的时候,我们期望真实的标签为1,而其他虚假的标签为0。换句话来说,我们认为原始数据的标注是准确无误的。但是,真实情况并不是这样,在某些领域,或者使用一些数据增强的方法时,都会存…

标签平滑(Label Smoothing)详解

一、什么是label smoothing? 标签平滑(Label smoothing),像L1、L2和dropout一样,是机器学习领域的一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地预测标签,改善…

标签平滑Label Smoothing

Lable Smoothing 是分类问题中错误标注的一种解决方法。 对于分类问题,特别是多分类问题,常常把向量转换成one-hot-vector(独热向量) one-hot带来的问题:(对于独热的简单解释:https://blog.csd…

模型优化之Label Smoothing

1. 引言 Label Smoothing 又被称之为标签平滑,常常被用在分类网络中来作为防止过拟合的一种手段,整体方案简单易用,在小数据集上可以取得非常好的效果。 Label Smoothing 做为一种简单的训练trick,可以通过很少的代价&#xff08…

Smoothing

文章目录 返回主目录Add-one SmoothingAdd-K SmoothingInterpolationGood-Turning Smoothing 返回主目录 这是一个系列的文章,点击返回综合目录页 Add-one Smoothing P A d d − 1 ( W i ∣ W i − 1 ) C ( W i − 1 , W i ) 1 C ( W i ) V P_{Add-1}(W_i|W_{i-…