迁移 MySQL 数据到 OceanBase 集群

2021/12/29 19:10:41

本文主要是介绍迁移 MySQL 数据到 OceanBase 集群,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

练习内容

请记录并分享下列内容:

  • 1(必选)使用 mysqldump 将 mysql的表结构和数据同步到 OceanBase 的MySQL 租户中。
  • 2(必选)使用 datax 配置至少一个表的 MySQL 到 OceanBase 的 MySQL 租户的离线同步。

1、基础环境

mysql 单机 192.168.237.137:22

OceanBase zone1 单副本 192.168.237.132

2、创建测试表

mysql> CREATE DATABASE IF NOT EXISTS RUNOOB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

mysql> create table Student(Sno char(9) primary key,Sname char(20) not null,Ssex char(2),Sage smallint,Sdept char(20));

添加student表数据
mysql>insert into Student(Sno,Sname,Ssex,Sage,Sdept)values('201215121','李勇','男','20','CS');
mysql>insert into Student(Sno,Sname,Ssex,Sage,Sdept)values('201215122','刘晨','女','19','CS');
mysql>insert into Student(Sno,Sname,Ssex,Sage,Sdept)values('201215123','王敏','女','18','MA');
mysql>insert into Student(Sno,Sname,Ssex,Sage,Sdept)values('201215125','张立','男','19','IS');


3、导出文档(练习必选1)

mysqldump -h 127.1 -uroot -P3306 -p  -d mxdata > mx_ddl.sql

4、导入数据(个人建议不这么搞 ,错太多) 我是没办法,官方练习题。

MySQL [mxdata] > source mx_ddl.sql

这个导出来的脚本有几个特征:

  • 视图的定义也会在里面,但是会以注释 /!/。视图我们不关注,这部分内容可以删除。
  • 会有一些特别的语法 OceanBase MYSQL 会不支持,但是不影响,需要替换掉其中部分。比如说变量 SQL_NOTESDEFINER 语句等。

5、安装datax (重点pom.xml 如果编译不通过就去注释)

5.1,系统要求:

System Requirements
Linux
JDK(1.8以上,推荐1.8)
Python(推荐Python2.6.X)
Apache Maven 3.x (Compile DataX)
官方的要求,基本上可用。但建议:Linux使用CentOS 6.9,因为配套的Python版本即是2.6.6,只需要配置Maven就好。Maven的版本建议使用3.2.5。刚开始用的3.8.1报错太多…

5.2,下载DataX源码:

$ git clone git@github.com:alibaba/DataX.git
1
使用git下载源码的方式,参考别的文档。BTW: 外网不稳定访问,多试。

5.3,通过maven打包:

$ cd {DataX_source_code_home}
$ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
3.1,一定要记得配置国内镜像,修改setting.xml

<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
5.2,常见错误(找不到依赖包)
[ERROR] Failed to execute goal on project hdfsreader: Could not resolve dependencies for project com.alibaba.datax:hdfsreader:jar:0.0.1-SNAPSHOT: Could not find artifact org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde in nexus-aliyun (https://maven.aliyun.com/repository/central) -> [Help 1]

从提示上看,是hdfsreader的包缺失,相应的hdfswriter也应该是不行的。因为我用不到这两个组件,于是在pom.xml中注释掉。

还有一个 oscarwriter,也用不到,也在pom.xml中注释掉。

[ERROR] Failed to execute goal on project oscarwriter: Could not resolve dependencies for project com.alibaba.datax:oscarwriter:jar:0.0.1-SNAPSHOT: Could not find artifact com.oscar:oscar:jar:7.0.8 at specified path /opt/DataX/oscarwriter/src/main/lib/oscarJDBC.jar -> [Help 1]
5.4、然后,编译成功。
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:43 min
[INFO] Finished at: 2021-05-28T00:42:50+08:00
[INFO] Final Memory: 305M/492M
[INFO] ------------------------------------------------------------------------
5.5配置datax 连接mysql和ocneanbase端 json文件
{
    "job": {
        "setting": {
            "speed": {
                "channel": 4 
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.1
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "datax",
                        "password": "root123",
                        "column": [
                            "*"
                        ],
                        "connection": [
                            {
                                "table": [
                                    "lcxtest1"
                                ],
                                "jdbcUrl": ["jdbc:mysql://192.168.32.130:3306/lcxtest?useUnicode=true&characterEncoding=utf8&useSSL=false"]
                            }
                        ]
                    }
                },

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

注明:这里需要

mysql增加一个同步账号 datax 可自行更改

onceanbase 修改 租户 账号密码

启动datax 进行同步

./datax.py ../job/mysql2ob.json (自行命名)


这篇关于迁移 MySQL 数据到 OceanBase 集群的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程