泛微网络实践:迁移 MySQL 数据到 OceanBase 集群

2024年 5月 7日 60.6k 0

作者简介:王芝超,数据库DBA。

1     mysqldump 迁移

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

 

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

 

视图的定义也会在里面,但是会以注释 /!/。视图我们不关注,这部分内容可以删除。

会有一些特别的语法 OceanBase MYSQL 会不支持,但是不影响,需要替换掉其中部分。比如说变量 SQL_NOTES,DEFINER 语句等。

下面这个示例就是导出的脚本里有一个 MAX_ROWS= 的设置,这个是 MySQL 特有的,OceanBase MySQL 没有这个问题,也不需要这个设置,不支持这个语法,会报错。

 

注意:上面导出的 SQL 中表名是大写,说明源端 MySQL 里设置表名默认很可能是大小写敏感。因此目标 OceanBase MySQL 租户也要设置。

 

在导出的表结构语句里,可能包含外键。在导入 OceanBase MySQL 里时,如果外键依赖的表没有创建时,导入脚本会报错。因此导入之前需要将外键检查约束先禁用掉。

 

1.1   Mysql 端导出数据

 

mysqldump -uroot -pecology --set-gtid-purged=OFF -P3306 wang >./wang.sql

 

1.2   导入 OceanBase

用 obclient 通过 obproxy 登录集群导入数据库

obclient  -uroot@tenant_wang#obcluster -h192.168.11.131 -P2883 -p -c -A

泛微网络实践:迁移 MySQL 数据到 OceanBase 集群-1

 

泛微网络实践:迁移 MySQL 数据到 OceanBase 集群-2

 

2     使用 datax 同步

使用 datax 配置至少一个表的 MySQL 到 OceanBase 的 MySQL 租户的离线同步

2.1   部署 datax 软件

下载 datax 软件,解压即可

wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

 

创建同步作业配置文件,生成模板文件

python ./datax/bin/datax.py -r mysqlreader -w oceanbasev10writer > ./datax/job/my2ob.json

 

删除 datax 中的隐藏文件

find ./datax/plugin -name ".*" | xargs rm -f

 

2.2   同步配置

修改模板文件

vi ./datax/job/wang.json
{    
"job": {
        "setting": {
            "speed": {
                "channel": 2,
            },
            "errorLimit": {
                "record": 10
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "wang",
                        "password": "wang",
                        "column": [
                            "*"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": [
                                    "jdbc:mysql://192.168.11.135:3306/wang"
                                ],
                                "table": [
                                    "locations"
                                ]
                            }
                        ]
                    }
                },
                "writer": {
                    "name": "oceanbasev10writer",
                    "parameter": {
                        "writeMode": "insert",
                        "username": "wang",
                        "password": "wang",
                        "writerThreadCount": 5,
                        "column": [
                            "*"
                        ],
                        "connection": [
                           {
                                "jdbcUrl": "||_dsc_ob10_dsc_||obcluster:tenant_wang||_dsc_ob10_dsc_||jdbc:mysql://192.168.11.131:2883/wang?useUnicode=true&characterEncoding=utf-8",
                                "table": [
                                    "locations"
                                ]
                            }
                        ]
                    }
                }
            }
        ]
    }
}

 

2.3   开始同步

启动作业同步

python /mysql/oceanbase/datax/bin/datax.py /mysql/oceanbase/datax/job/two.json  

 

泛微网络实践:迁移 MySQL 数据到 OceanBase 集群-3

 

 

检查同步情况

泛微网络实践:迁移 MySQL 数据到 OceanBase 集群-4

泛微网络实践:迁移 MySQL 数据到 OceanBase 集群-5

 

 

3     避坑指南

Unknown character set: 'utf8mb3'

OceanBase 的字符集为UTFBMB4

修改修改 mysqldump 的备份文件替换后即可重新导入

泛微网络实践:迁移 MySQL 数据到 OceanBase 集群-6

 

 

 ————————————————

 

附录:

练习题:

实践练习一(必选):OceanBase Docker 体验 

实践练习二(必选):手动部署 OceanBase 集群 

实践练习三(可选):使用OBD 部署一个 三副本OceanBase 集群 

实践练习四(必选):迁移 MySQL 数据到 OceanBase 集群 

实践练习五(可选):对 OceanBase 做性能测试 

实践练习六(必选):查看 OceanBase 执行计划 

还没交作业的小伙伴要抓紧啦!

可以免费带走 OBCP 考试券喔~~

方法一:完成四道必选练习

方法二:任意一道练习题 ➕ 结业考试超过80分

已经有很多同学抢先答题了,

加入钉钉群(群号3582 5151),和大家一起学习、交流~~

进群二维码:

泛微网络实践:迁移 MySQL 数据到 OceanBase 集群-7

 

 

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论