前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >OceanBase初体验之从MySQL迁移数据到OceanBase集群

OceanBase初体验之从MySQL迁移数据到OceanBase集群

作者头像
HOHO
发布于 2024-03-18 00:02:27
发布于 2024-03-18 00:02:27
22500
代码可运行
举报
运行总次数:0
代码可运行

前置条件

  • MySQL 环境
  • OceanBase 环境
  • 测试用的表结构和一些数据

先在源端 MySQL 用如下脚本创建测试表,以及写入10000条数据用于迁移测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use test;
CREATE TABLE students (
  `id` int NOT NULL PRIMARY KEY,
  `name` varchar(255) ,
  `code` varchar(20),
  `class` varchar(255)
);

DELIMITER $$
DROP PROCEDURE if EXISTS insertStudents;   
CREATE procedure insertStudents() 
BEGIN
	DECLARE i INT; 
	SET i = 0;  
	WHILE i<10000 DO 
		INSERT INTO students(id, name, code, class) VALUES(i+1, CONCAT('User', i), '2020010' + i + 10, CONCAT(FLOOR(RAND() * 10),'c'));  
		SET i = i+1;    
	END WHILE;  
END $$ 
DELIMITER ; 

CALL insertStudents(); 

select count(*) from students;

准备工作完成后,我们选择合适的迁移工作来进行操作。对于 OceanBase 的MySQL 租户,通常有如下两种全量迁移方式:

  • mysqldump,MySQL自带的导出工具,安装好MySQL后就能直接使用,适合小数据量场景下的快速迁移,表结构和数据被导出成sql文件
  • DataX,是阿里开源的异构数据迁移工具,支持丰富的上下游数据源使用广泛,对 OceanBase 的兼容性比较好,适合大批量数据迁移有较好的性能

下面做分别演示。

迁移方式一:mysqldump

mysqldump不需要单独安装,只要装了 MySQL 的环境基本都会有mysqldump,可以用如下命令来检查:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# which mysqldump
/usr/bin/mysqldump

另外,obclient其实也集成了mysqldump工具,直接拿来用也可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# su - ob
Last login: Sun Mar 17 10:49:37 CST 2024 on pts/1
[ob@localhost ~]$ which mysqldump
~/.oceanbase-all-in-one/obclient/u01/obclient/bin/mysqldump

整体迁移流程为:从MySQL导出sql文件 -> 去OceanBase执行sql文件,导出的脚本都是标准的SQL语法。

第一步先把数据导出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[ob@localhost ~]$ mkdir mysqldump_data
[ob@localhost ~]$ mysqldump -h x.x.x.222 -u root -P 3306 -p -B "test" --tables "students" > /home/ob/mysqldump_data/students.sql
#导出的sql脚本包含了create table和insert,可以自行检查

第二步把数据导入,通常有两种方式:mysql命令行和source语法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#方式一:用命令行导入
[ob@localhost ~]$ mysql -h x.x.x.222 -u root -P 2883 -D test < /home/ob/mysqldump_data/students.sql

#方式二:用source导入
[ob@localhost ~]$ obclient -h x.x.x.222 -u root -P 2883 -D test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 524290
Server version: OceanBase_CE 4.2.2.0 (r100010012024022719-c984fe7cb7a4cef85a40323a0d073f0c9b7b8235) (Built Feb 27 2024 19:20:54)
Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

obclient [test]> show tables;
Empty set (0.002 sec)

obclient [test]> source /home/ob/mysqldump_data/students.sql;
Query OK, 10000 rows affected (0.069 sec)
Records: 10000  Duplicates: 0  Warnings: 0

obclient [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| students       |
+----------------+
1 row in set (0.002 sec)

obclient [test]> select count(*) from students;
+----------+
| count(*) |
+----------+
|    10000 |
+----------+
1 row in set (0.005 sec)

到这里数据迁移就完成了。

扩展:只要是标准SQL语法组成的.sql文件,都可以用这两种方式批量执行。

迁移方式二:DataX

DataX 是单独的组件所以需要先下载才能使用,但是基本是开箱即用,没有复杂的环境配置。

先准备好 DataX 的使用环境,下载、解压即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz
[root@localhost ~]# tar -xvzf datax.tar.gz

DataX 的迁移任务被定义成一个个job,安装官网的配置文件规范我们准备一个如下的job配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# cd datax/job/
[root@localhost job]# vi mysql2ob_test.json
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "job": {
        "setting": {
            "speed": {
                "channel": 4
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.1
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "root",
                        "password": "填实际密码,不能留空",
                        "column": ["*"],
                        "connection": [
                            {
                                "table": ["students"],
                                "jdbcUrl": ["jdbc:mysql://x.x.x.222:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false"]
                            }
                        ]
                    }
                },
                "writer": {
                    "name": "oceanbasev10writer",
                    "parameter": {
                        "obWriteMode": "insert",
                        "column": ["*"],
                        "preSql": ["truncate table students_datx"],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:oceanbase://x.x.x.222:2883/test?",
                                "table": ["students_datx"]
                            }
                        ],
                        "username": "root",
                        "password":"填实际密码,不能留空",
                        "writerThreadCount":10,
                        "batchSize": 1000,
                        "memstoreThreshold": "0.9"
                    }
                }
            }
        ]
    }
}

配置内容主要包含以下几部分:

  • setting,job的参数配置,如并发数、限流等
  • reader,源端的读取方式,主要包含源端的数据库连接信息
  • writer,目标端的写入方式,主要包含目标端的数据库连接信息和写入行为等

由于 DataX 不会迁移表结构,所以先在 OceanBase 中把表建好,表名可以不一样,但是字段要一样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
obclient [test]> CREATE TABLE students_datax (
    ->   `id` int NOT NULL PRIMARY KEY,
    ->   `name` varchar(255) ,
    ->   `code` varchar(20),
    ->   `class` varchar(255)
    -> );
Query OK, 0 rows affected (0.179 sec)

准备就绪后启动 DataX 执行即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost job]# python ../bin/datax.py mysql2ob_test.json
... ...
2024-03-17 11:37:29.012 [job-0] INFO  StandAloneJobContainerCommunicator - Total 10000 records, 207784 bytes | Speed 20.29KB/s, 1000 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.143s |  All Task WaitReaderTime 0.022s | Percentage 100.00%
2024-03-17 11:37:29.013 [job-0] INFO  JobContainer -
任务启动时刻                    : 2024-03-17 11:37:18
任务结束时刻                    : 2024-03-17 11:37:29
任务总计耗时                    :                 10s
任务平均流量                    :           20.29KB/s
记录写入速度                    :           1000rec/s
读出记录总数                    :               10000
读写失败总数                    :                   0

校验下数据是否正常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[ob@localhost ~]$ obclient -h x.x.x.222 -u root -P 2883 -D test -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 524294
Server version: OceanBase_CE 4.2.2.0 (r100010012024022719-c984fe7cb7a4cef85a40323a0d073f0c9b7b8235) (Built Feb 27 2024 19:20:54)
Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

obclient [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| students       |
| students_datax |
+----------------+
2 rows in set (0.002 sec)

obclient [test]> select count(*) from students_datax;
+----------+
| count(*) |
+----------+
|    10000 |
+----------+
1 row in set (0.004 sec)

其他方式

OMS迁移

OMS(OceanBase Migration Service)是 OceanBase 提供的迁移服务,它包含在 OCP 中,可以在web界面上做一些配置即可实现数据迁移,它支持库表结构迁移、全量迁移和增量同步。

后续体验OMS的时候再来介绍。

增量实时同步

前面演示的两种方法都是全量迁移,对于有增量实时同步的场景以上工具还无法解决,需要引入新的工具。这一类工具的原理基本都是一样的,就是订阅 MySQL binlog 进行回放解析成标准sql在下游执行,使用比较多的有 Canal,也是阿里的开源项目。

使用方式可以参考:

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000507573

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
技术分享 | OceanBase 租户延迟删除
对于第二种方式,之前同事们有内部讨论过OceanBase的设计初衷;有可能是以防租户被误删、或者是给费用到期并且不续租的租户一段缓冲的时间,让他能在数据保留时间到期前备份需要的数据出来。
爱可生开源社区
2023/03/13
5220
OceanBase初体验之Docker快速部署试用环境
准备好一台安装了 Docker 的 Linux 服务器,确保能够连接到 Docker Hub 仓库。
HOHO
2024/03/14
2570
OceanBase初体验之Docker快速部署试用环境
OceanBase初体验之查看OceanBase的执行计划
obd里面已经集成了tpcc测试工具,需要联网更新一下插件即可。如果机器不具备外网环境,需要提前下载BenchmarkSQL上传到测试机中。
HOHO
2024/03/18
1160
OceanBase初体验之查看OceanBase的执行计划
OceanBase初体验之部署生产标准的三节点分布式集群
如果是使用的物理机部署,建议在BIOS中开启最大性能模式,X86芯片开启超线程。三台节点保证时间一致。
HOHO
2024/03/15
3780
OceanBase初体验之部署生产标准的三节点分布式集群
OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB
在开始学习OceanBase的概念,发现了很多新的知识和新的架构的思维方式,用传统的数据库理念去理解OceanBase可能有一些吃力,这里总结开始学习OceanBase数据库的学习的一些概念和大家进行探讨,加速理解OceanBase的一些基础知识和概念。
AustinDatabases
2024/11/25
1870
OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB
OceanBase 学习记录 -- 安装简易环境
学习OB ,这是OB 的第二期,还是那句话,让人家用枪逼着上路,不如自己自找出路,今天安装。基于OB并不是一个想装就能装的数据库,OB的同学给我们这些想用的人,来了一套一键安装的版本。其中文档中明确了,我们这样使用和安装的问题,但我们就是要试用一下,所以必然就这样了。尤其昨天听了一耳朵 OceanBase新数据库版本的发布会,其中有几句话。
AustinDatabases
2024/11/25
1470
OceanBase  学习记录 -- 安装简易环境
OB 运维 | 七步定位 OceanBase 登录报错
近期,生产环境通过客户端工具可正常连接 OceanBase 集群,但通过黑屏连接登录报错。
爱可生开源社区
2024/12/31
1540
OB 运维 | 七步定位 OceanBase 登录报错
【DB宝87】手动部署 OceanBase 三副本集群(在同一个节点)
OceanBase Docker安装体验:https://www.xmmup.com/oceanbase-dockeranzhuangtiyan.html 手动部署 OceanBase 单副本集群:h
AiDBA宝典
2022/02/23
7450
【DB宝87】手动部署 OceanBase 三副本集群(在同一个节点)
【DB宝85】 OceanBase Docker安装体验
参考:https://www.xmmup.com/dbbao2centos7anzhuangdocker.html
AiDBA宝典
2022/02/23
1K0
【DB宝85】 OceanBase Docker安装体验
技术分享 | 使用 ANTMAN 工具替换 OceanBase 云平台节点
上海某公司 DBA,曾经从事银行、证券数仓设计、开发、优化类工作,现主要从事电信级 IT 系统及数据库工作。有三年以上 OceanBase 工作经验,参与某通信行业核心数据库全面国产化工作。获得的专业技能与认证包括 OceanBase OBCP、Oracle OCP 11g、OracleOCM 11g 、MySQL OCP 5.7 、腾讯云TBase、腾讯云 TDSQL、阿里云 ACP 、KingBase KCP。
爱可生开源社区
2023/08/18
2810
技术分享 | 使用 ANTMAN 工具替换 OceanBase 云平台节点
OB 运维 | MySQL 迁移 Oracle 场景中自增主键的实践
作者:赵黎明,爱可生 MySQL DBA 团队成员,熟悉 Oracle、MySQL 等数据库,擅长数据库性能问题诊断、事务与锁问题的分析等,负责处理客户 MySQL 及我司自研 DMP 平台日常运维中的问题,对开源数据库相关技术非常感兴趣。
爱可生开源社区
2023/10/23
4100
OB 运维 | MySQL 迁移 Oracle 场景中自增主键的实践
【OceanBase】基于CentOS系统安装OceanBase数据库
oceanbase镜像-oceanbase下载地址-oceanbase安装教程-阿里巴巴开源镜像站
宝耶需努力
2022/12/13
1K0
技术分享 | OceanBase 数据处理之控制文件
有时我们在导入导出数据时,需要对数据进行处理,来满足业务上的数据需求,此时需要使用控制文件配合导数工具来满足业务上不同数据的需求。
爱可生开源社区
2023/02/21
6740
故障分析 | OceanBase Proxy 无法连接 OBserver 集群
使用RPM的方式部署proxy实例,部署之后使用OBclient进行连接,报错提示:
爱可生开源社区
2022/12/07
1.1K0
(7) MySQL数据库备份详解
比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据可能也已经被删除了, 我们不能使用从数据库上的数据来恢复主数据库上的数据,只能通过备份进行误删除数据的恢复
用户1214487
2019/05/25
1K0
一文搞懂 OceanBase 4.x 全链路追踪
当出现超时问题时,往往无法快速定位是 OceanBase 内部组件的问题 还是 网络的问题。运维人员只能根据经验和 observer 日志进行分析。
爱可生开源社区
2025/04/16
1030
一文搞懂 OceanBase 4.x 全链路追踪
技术分享 | 使用 RPM 部署 Oceanbase Proxy
关于OBproxy的功能与介绍就不再详细说明了,从3.1.3开始,OB提供了config server的源码作为tool在开源仓库内。
爱可生开源社区
2023/02/02
5390
技术分享 | OceanBase 手滑误删了数据文件怎么办
手滑误删了数据文件,并且没有可替换的节点时,先别急着提桶跑路,可以考虑利用参数 server_permanent_offline_time 来重建受影响的节点。
爱可生开源社区
2023/04/18
3760
弃用 MySQL 后存储成本降低 85%,携程业务系统数据库升级技术实践
携程是一家中国领先的在线票务服务公司,从 1999 年创立至今,数据库系统历经三次替换。在移动互联网时代,面对云计算卷积而来的海量数据,携程通过新的数据库方案实现存储成本降低 85% 左右,性能提升数倍。本文讲述携程在历史库场景下,如何解决水平扩容、存储成本、导入性能等痛点,以及对于解决方案的制定和思考过程。
深度学习与Python
2023/09/18
3750
弃用 MySQL 后存储成本降低 85%,携程业务系统数据库升级技术实践
技术分享 | OceanBase 安全审计之用户管理与访问控制
上一期我们讲了关于 OceanBase 安全审计中有关身份鉴别的部分。本期主要以 MySQL 和 OceanBase 对比的方式,来介绍 OceanBase(MySQL 模式)安全体系中关于用户管理和访问控制的相关内容,包括用户管理、用户操作权限控制、网络安全访问控制、行级权限控制、角色管理。
爱可生开源社区
2023/08/18
4970
技术分享 | OceanBase 安全审计之用户管理与访问控制
推荐阅读
相关推荐
技术分享 | OceanBase 租户延迟删除
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验