迁移mysql数据到oceanbase

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 迁移MySQL数据到oceanbase,MySQL数据库时maridb


1 实验环境

mysql数据库使用的是maridb, oceanbase集群用的是obd自动部署的单节点集群。

2 使用 mysqldump 将 mysql的表结构和数据同步到 OceanBase 的MySQL 租户中

mysql数据库中的数据由Percona tpcc-mysql产生,这个工具主要是用于MySQL数据库的TPCC测试,产生的数据符合TPCC测试标准。首先下载编译tpcc-mysql工具:

[root@localhost ~]# git clone https://github.com/Percona-Lab/tpcc-mysql
[root@localhost tpcc-mysql]# pwd
/root/tpcc-mysql/src
[root@localhost src]# make

git克隆项目至本地后进入到项目目录下src目录,运行make命令即可。编译成功后在项目目录下生成名为tpcc_load的问题可用于载入数据。

      登陆MySQL数据库创建数据库,执行tpcc-mysql目录下的建表脚本

[root@localhost tpcc-mysql]# mysqladmin -uroot -p'' create sysben_test;
mysql> use sysben_test;
mysql> source create_table.sql

     使用tpcc_load工具装载数据,-w参数指定仓库个数

[root@localhost ~]# ./tpcc_load -h127.0.0.1 -P 3306 -d sysbench_test -uroot -p'' -w 2

数据装载完毕,检验无误后,使用mysqldump进行数据库表结构导出

[root@localhost ~]# mysqldump -h 127.0.0.1 -P3306 -uroot -p'rooT@123' -d sysben_test --compact > sysben_ddl.sql
检查导出的表结构文件

[root@localhost ~]# head -40 sysben_ddl.sql
/!40101 SET @saved_cs_client = @@character_set_client /;
/!50503 SET character_set_client = utf8mb4 /;

CREATE TABLE `customer` (
  `c_id` int NOT NULL,
  `c_d_id` tinyint NOT NULL,
  `c_w_id` smallint NOT NULL,
  `c_first` varchar(16) DEFAULT NULL,
  `c_middle` char(2) DEFAULT NULL,
  `c_last` varchar(16) DEFAULT NULL,
  `c_street_1` varchar(20) DEFAULT NULL,
  `c_street_2` varchar(20) DEFAULT NULL,
  `c_city` varchar(20) DEFAULT NULL,
  `c_state` char(2) DEFAULT NULL,
  `c_zip` char(9) DEFAULT NULL,
  `c_phone` char(16) DEFAULT NULL,
  `c_since` datetime DEFAULT NULL,
  `c_credit` char(2) DEFAULT NULL,
  `c_credit_lim` bigint DEFAULT NULL,
  `c_discount` decimal(4,2) DEFAULT NULL,
  `c_balance` decimal(12,2) DEFAULT NULL,
  `c_ytd_payment` decimal(12,2) DEFAULT NULL,
  `c_payment_cnt` smallint DEFAULT NULL,
  `c_delivery_cnt` smallint DEFAULT NULL,
  `c_data` text,
  PRIMARY KEY (`c_w_id`,`c_d_id`,`c_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;

编辑一下,去掉其中的COLLATE=utf8mb4_0900_ai_ci及ENGINE=Innodb。

导出数据

[root@localhost ~]# mysqldump -h 127.0.0.1 -P3306 -uroot -p'rooT@123' -t sysben_test --compact > sysben_data.sql
将导出的文件拷贝至/home/admin目录下,登陆Oceanbase集群,相应租户下,创建数据库,运行

表创建脚本和数据导入脚本

obclient -h127.0.0.1 -uroot@my_tenant -P2883 -p -c -A test
MySQL [test]> source sysben_ddl.sql;
MySQL [test]> source sysben_data.sql

脚本运行过程中没有报错,选择一个表,导入的数据。

MySQL [test]> select count(*) from orders;

  +----------+
  | count(*) |
  +----------+
  |   600000 |
  +----------+
  1 row in set (1.447 sec)

    表中的记录数同原表相同。

2   使用 datax 离线同步 MySQL 表 到 OceanBase 的 MySQL 租户

下载jdk,设置需要的环境变量

[root@localhost ~]# yum -y install java-1.8.0-openjdk.x86_64

下载并解压datax

[root@localhost datax]# wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
[root@localhost datax]# tar -zxvf datax.tar.gz -C /usr/local

运行一下datax自带的测试job

[root@localhost datax]# bin/datax.py /usr/local/datax/job/job.json

022-01-19 03:45:21.630 [main] WARN  ConfigParser - 插件[streamreader,streamwriter]加载失败,1s后重试... Exception:Code:
[Common-00], Describe:[您提供的配置文件存在错误信息,请检查您的作业配置 .] - 配置信息错误,您提供的配置文件[/usr/local/d
atax/plugin/reader/._drdsreader/plugin.json]不存在. 请检查您的配置文件.
2022-01-19 03:45:22.637 [main] ERROR Engine -
经DataX智能分析,该任务最可能的错误原因是:
com.alibaba.datax.common.exception.DataXException: Code:[Common-00], Describe:[您提供的配置文件存在错误信息,请检查您的
作业配置 .] - 配置信息错误,您提供的配置文件[/usr/local/datax/plugin/reader/._drdsreader/plugin.json]不存在. 请检查您的
配置文件.

这里出错了,看了错误信息,完全不知道怎样解决,百度一下找到了解决方案,

rm -rf /usr/local/datax/plugin//._
运行上面的rm命令之后,再进行测试就成功了

[root@localhost datax]# bin/datax.py /usr/local/datax/job/job.json

  2022-01-19 03:53:12.059 [main] INFO  VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
  2022-01-19 03:53:12.066 [main] INFO  Engine - the machine info  =>
  2022-01-19 03:53:22.249 [job-0] INFO  JobContainer -
  --------
  --------
  --------
  任务启动时刻                    : 2022-01-19 03:53:12
  任务结束时刻                    : 2022-01-19 03:53:22
  任务总计耗时                    :                 10s
  任务平均流量                    :          253.91KB/s
  记录写入速度                    :          10000rec/s
  读出记录总数                    :              100000
  读写失败总数                    :                   0

准备数据离线同步需要的job json文件,源库使用的是mysql自带sakila示例数据库,同步的表是payment,同步至oceanbase的test数据库下。

"job": {

    "setting": {
        "speed": {
            "channel": 1
        },
        "errorLimit": {
            "record": 0,
            "percentage": 0.1
        }
    },
    "content": [
        {
            "reader": {
                "name": "mysqlreader",
                "parameter": {
                    "username": "root",
                    "password": "root123",
                    "column": [
                        "*"
                    ],
                    "connection": [
                        {
                            "table": [
                                "payment"
                            ],
                            "jdbcUrl": ["jdbc:mysql://127.0.0.1:3306/sakila?useUnicode=true&characterEncoding=utf8"]
                        }
                    ]
                }
            },

            "writer": {
                "name": "oceanbasev10writer",
                "parameter": {
                    "obWriteMode": "insert",
                    "column": [
                        "*"
                    ],
                    "preSql": [
                        "truncate table orders"
                    ],
                    "connection": [
                        {
                            "jdbcUrl": "||_dsc_ob10_dsc_||obcluster:sys||_dsc_ob10_dsc_||jdbc:oceanbase://127.0.0.1:2883/test?useLocalSessionState=true&allowBatch=true&allowMultiQueries=true&rewriteBatchedStatements=true",
                            "table": [
                                "payment"
                            ]
                        }
                    ],
                    "username": "root",
                    "password":"",
                    "writerThreadCount":10,
                    "batchSize": 1000,
                    "memstoreThreshold": "0.9"
                }
            }
        }
    ]
}

}

运行job,将数据同步至oceanbase数据库

[root@localhost datax]#bin/datax.py job/my_job.json

  --------
  --------
  2022-01-20 00:53:58.619 [job-0] INFO  JobContainer -
  任务启动时刻                    : 2022-01-20 00:53:45
  任务结束时刻                    : 2022-01-20 00:53:58
  任务总计耗时                    :                 12s
  任务平均流量                    :           50.84KB/s
  记录写入速度                    :           1604rec/s
  读出记录总数                    :               16049
  读写失败总数                    :                   0

同步任务执行成功,没有读写失败,速度是50.84KB/s。

登陆目的库检查一下:

MySQL [test]> select count(*) from payment;

+----------+
| count(*) |
+----------+
|    16049 |
+----------+
1 row in set (0.014 sec)

   记录数同源库一致,同步成功。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
9月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
10月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1709 1
|
11月前
|
SQL 人工智能 关系型数据库
如何实现MySQL百万级数据的查询?
本文探讨了在MySQL中对百万级数据进行排序分页查询的优化策略。面对五百万条数据,传统的浅分页和深分页查询效率较低,尤其深分页因偏移量大导致性能显著下降。通过为排序字段添加索引、使用联合索引、手动回表等方法,有效提升了查询速度。最终建议根据业务需求选择合适方案:浅分页可加单列索引,深分页推荐联合索引或子查询优化,同时结合前端传递最后一条数据ID的方式实现高效翻页。
569 0
|
10月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
758 10
|
关系型数据库 MySQL 数据库
MySQL数据库上云迁移
本文介绍了将数据库迁移到RDS for Mysql的两种主要方法:停服迁移和不停服迁移。停服迁移适合可短暂中断服务的场景,通过mysqldump或DTS完成;不停服迁移适用于需保持业务连续性的场景,推荐使用DTS实现结构、全量及增量数据迁移。文中详细列出了每种方法的具体操作步骤,帮助企业根据需求选择合适的迁移方案。
398 1
MySQL数据库上云迁移
|
11月前
|
SQL 存储 缓存
MySQL 如何高效可靠处理持久化数据
本文详细解析了 MySQL 的 SQL 执行流程、crash-safe 机制及性能优化策略。内容涵盖连接器、分析器、优化器、执行器与存储引擎的工作原理,深入探讨 redolog 与 binlog 的两阶段提交机制,并分析日志策略、组提交、脏页刷盘等关键性能优化手段,帮助提升数据库稳定性与执行效率。
295 0
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
1432 0
|
存储 关系型数据库 MySQL
【赵渝强老师】OceanBase数据库从零开始:MySQL模式
《OceanBase数据库从零开始:MySQL模式》是一门包含11章的课程,涵盖OceanBase分布式数据库的核心内容。从体系架构、安装部署到租户管理、用户安全,再到数据库对象操作、事务与锁机制,以及应用程序开发、备份恢复、数据迁移等方面进行详细讲解。此外,还涉及连接路由管理和监控诊断等高级主题,帮助学员全面掌握OceanBase数据库的使用与管理。
646 5

热门文章

最新文章

推荐镜像

更多