迁移 MySQL 数据到 OceanBase 集群(使用mysqldump、datax等工具)

通过本实验,可以掌握从 MySQL 向 OceanBase 迁移数据的基本方法:mysqldump、datax 、canal 等。

1、相关准备工作

1.1 数据库环境

1套MySQL数据库,本次使用mysql5.7.36,部署在虚拟机(OS:CentOS7.9)
1套OceanBase集群,本次使用的是三副本集群,部署方式参考:https://blog.csdn.net/gdrs206/article/details/122933818

1.2 准备测试数据

## 使用tpcc-mysql生成测试数据
## 安装tpcc-mysql
ln -s /mysql/app/mysql/lib/libmysqlclient.so.20.3.23 /usr/local/lib/libmysqlclient.so.20

unzip -q /soft/tpcc-mysql-master.zip -d /mysql/app/
cd /mysql/app/tpcc-mysql-master/src
make

## 创建测试库,导入tpcc建表脚本
## 当前测试库为MySQL 5.7.36
mysql -uroot -p -h192.168.79.190 -P3308
create database oadb;
use oadb;
source /mysql/app/tpcc-mysql-master/create_table.sql;

## 导入测试数据
/mysql/app/tpcc-mysql-master/tpcc_load -uroot -proot -h192.168.79.190 -P3308 -d oadb -w 1

## 查看数据表的相关记录情况
SELECT TABLE_NAME,DATA_LENGTH,INDEX_LENGTH,(DATA_LENGTH+INDEX_LENGTH) as length,TABLE_ROWS,concat(round((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2), 'MB') as total_size FROM information_schema.TABLES WHERE TABLE_SCHEMA='oadb' order by length desc; 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

2.1 MySQL源端导出数据

## 导出表结构
mysqldump -h192.168.79.190 -uroot -p -P3308 -d oadb --compact > /mysql/backup/oadb_ddl.sql

### 检查文件中是否存在特殊语法、变量等
grep -Ei "SQL_NOTES|DEFINER|MAX_ROWS" /mysql/backup/oadb_ddl.sql

## 导出表数据
mysqldump -h192.168.79.190 -uroot -p -P3308 --single-transaction -t oadb --compact > /mysql/backup/oadb_data.sql

在这里插入图片描述

2.2 导入数据到OceanBase

## 先建一个数据库oadb
obclient -h192.168.79.200 -uroot@myoadb#myob -P2883 -p -c -A
create database oadb;

## 导入表结构
use oadb;
source /mysql/backup/oadb_ddl.sql

### 导入表数据前先禁用外键检查约束
show global variables like '%foreign%';
set global foreign_key_checks=off;
show global variables like '%foreign%';

### 退出重新登陆,再进行导数
use oadb;
source /mysql/backup/oadb_data.sql

在这里插入图片描述
在这里插入图片描述

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

3.1 安装配置datax

安装参考datax文档:
https://github.com/alibaba/DataX/blob/master/userGuid.md

## 下载安装包:
离线上传,或者:
wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

tar -zxf /soft/datax.tar.gz -C /mysql/app/
cd /mysql/app/

## 删除datax中的隐藏文件
find /mysql/app/datax/plugin -name ".*" | xargs rm -f

## 如无Python则先安装
yum install -y python java

在这里插入图片描述

3.2 创建和调整作业的配置文件


## 生成模板文件
python /mysql/app/datax/bin/datax.py -r mysqlreader -w oceanbasev10writer > /mysql/app/datax/job/mysql2ob.json

## 根据实际情况调整模板文件
vi /mysql/app/datax/job/mysql2ob.json

{    
"job": {
        "setting": {
            "speed": {
                "channel": 2,
            },
            "errorLimit": {
                "record": 10
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "root",
                        "password": "root",
                        "splitPk": "c_id",
                        "column": ["*"],
                        "connection": [
                            {
                                "jdbcUrl": [
                                    "jdbc:mysql://192.168.79.190:3308/oadb"
                                ],
                                "table": [
                                    "customer"
                                ]
                            }
                        ]
                    }
                },
                "writer": {
                    "name": "oceanbasev10writer",
                    "parameter": {
                        "writeMode": "insert",
                        "username": "root",
                        "password": "root",
                        "writerThreadCount": 5,
                        "column": [
                            "*"
                        ],
                        "connection": [
                           {
                                "jdbcUrl": "||_dsc_ob10_dsc_||myob:myoadb||_dsc_ob10_dsc_||jdbc:oceanbase://192.168.79.200:2883/oadb?useUnicode=true&characterEncoding=utf-8",
                                "table": [
                                    "customer"
                                ]
                            }
                        ]
                    }
                }
            }
        ]
    }
}

## 启动同步作业
## obclient -h192.168.79.200 -uroot@myoadb#myob -P2883 -p -c -A
## truncate oadb.customer;
python /mysql/app/datax/bin/datax.py /mysql/app/datax/job/mysql2ob.json

## 检查同步情况 
select count(*) from oadb.customer;
select * from oadb.customer limit 1;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、使用 datax 配置至少一个表的 OceanBase 到 CSV 以及 CSV 到 OceanBase 的离线同步

4.1 OceanBase to CSV

## 生成模板文件
python /mysql/app/datax/bin/datax.py -r mysqlreader -w oceanbasev10writer > /mysql/app/datax/job/ob2csv.json

## 调整模板文件
vi /mysql/app/datax/job/ob2csv.json
{
   "job": {
       "setting": {
           "speed": {
               "channel": 8
           },
           "errorLimit": {
               "record": 0,
               "percentage": 0.1
           }
       },
       "content": [
           {
               "reader": {
                   "name": "oceanbasev10reader",
                   "parameter": {
				       "timeout":10000,
                       "readBatchSize":10000,
                       "readByPartition":"true",
                       "column": ["*"],
                       "connection": [
                           {
                               "jdbcUrl": ["||_dsc_ob10_dsc_||myob:myoadb||_dsc_ob10_dsc_||jdbc:oceanbase://192.168.79.200:2883/oadb?useUnicode=true&characterEncoding=utf-8"],
                                "table": ["orders"]
                           }
                       ],
                       "password": "root",
                       "username": "root",
                       "where": ""
                   }
               },
               "writer": {
                    "name": "txtfilewriter",
                    "parameter": {
                       "path": "/mysql/backup/datax",
                       "fileName": "orders",
                       "encoding": "UTF-8",
                       "writeMode": "truncate",
                       "dateFormat": "yyyy-MM-dd hh:mm:ss" ,
                       "nullFormat": "\\N" ,
                       "fileFormat": "csv" ,
                       "fieldDelimiter": ","
                    }
               }
           }
       ]
   }
}

## 启动同步作业
python /mysql/app/datax/bin/datax.py /mysql/app/datax/job/ob2csv.json

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 CSV to OceanBase

## 生成模板文件
python /mysql/app/datax/bin/datax.py -r mysqlreader -w oceanbasev10writer > /mysql/app/datax/job/csv2ob.json

## 调整模板文件
vi /mysql/app/datax/job/csv2ob.json
{
   "job": {
       "setting": {
           "speed": {
               "channel": 8
           },
           "errorLimit": {
               "record": 0,
               "percentage": 0.1
           }
       },
       "content": [
           {
               "reader": {
                   "name": "txtfilereader",
                   "parameter": {
                       "path": ["/mysql/backup/datax"],
                       "fileName": "orders",
                       "encoding": "UTF-8",
                       "column": ["*"],
                       "dateFormat": "yyyy-MM-dd hh:mm:ss" ,
                       "nullFormat": "\\N" ,
                       "fieldDelimiter": ","
                   }
               },
               "writer": {
                   "name": "oceanbasev10writer",
                   "parameter": {
                       "obWriteMode": "insert",
                       "column": ["*"],
                       "preSql": [
                           "truncate table orders"
                       ],
                       "connection": [
                           {
                               "jdbcUrl": "||_dsc_ob10_dsc_||myob:myoadb||_dsc_ob10_dsc_||jdbc:oceanbase://192.168.79.200:2883/oadb?useUnicode=true&characterEncoding=utf-8",
                                "table": [
                                   "orders"
                               ]
                           }
                       ],
                       "username": "root",
                       "password": "root",
                       "writerThreadCount": 10,
                       "batchSize": 1000,
                       "memstoreThreshold": "0.9"
                   }
               }
           }
       ]
   }
}

## 启动同步作业
python /mysql/app/datax/bin/datax.py /mysql/app/datax/job/csv2ob.json

## 检查同步情况
obclient -h192.168.79.200 -uroot@myoadb#myob -P2883 -p -c -A -e "select count(*) from oadb.orders;select * from oadb.orders limit 1;"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
相关连接:
https://open.oceanbase.com/answer/detail?id=20400030

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值