迁移 MySQL 数据到 OceanBase 集群

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)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值