暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

使用mysqldump和datax从mysql数据迁移到OceanBase

原创 shunwah 2022-03-04
2190

使用mysqldump和datax从mysql数据迁移到OceanBase


oceanbase部署请查看历史文章

https://www.modb.pro/db/324460 使用OBD自动部署三节点OceanBase文档

https://www.modb.pro/db/328171 OceanBase手动部署三节点OBserver文档

https://www.modb.pro/db/322997 OceanBase 单节点手动部署OB文档

https://www.modb.pro/db/250245 Docker单节点自动化部署OB集群

mysql部署请查看请查看历史文章

https://www.modb.pro/db/337262 Linux使用rpm部署安装mysql-5.7

https://www.modb.pro/db/337259 Linux安装MySQL8.0.16二进制包


本次试验环境使用OBD自动部署三节点OceanBase文档

机器信息

机器类型主机配置备注
OSCentos 7.4 
中控机 /OBDCPU:8C内存:16G
目标机器 /OBserverCPU:8C内存:32G
系统盘 /dev/vda 50GLVS分区、文件系统:EXT4
数据盘 /datadev/vdb 100GGPT分区、文件系统:xfs
事务日志盘 /redodev/vdc 100GGPT分区、文件系统:xfs

机器划分

角色机器IP备注
OBD172.20.2.131中控机
OBserver172.20.2.120{2881,2882}, {3881,3882} zone1
 172.20.2.121{2881,2882}, {3881,3882} zone2
 172.20.2.122{2881,2882}, {3881,3882} zone3
OBproxy172.20.2.120{2883,2884} 反向代理
 172.20.2.121{2883,2884} 反向代理
 172.20.2.122{2883,2884} 反向代理
OBAgent172.20.2.120监控采集框架 默认端口 8088、8089
 172.20.2.121监控采集框架 默认端口 8088、8089
 172.20.2.122监控采集框架 默认端口 8088、8089
OBclient172.20.2.131OB命令行客户端

安装部署版本

软件名版本安装方式
java1.8.0 yum安装
maven3.8.4unzip 
obclient2.0.0-2.el7.x86_64yum安装 
oceanbase-ce3.1.2.el7.x86_64yum安装 
datax
python安装
mysql5.7.16yum安装 

工具准备 mysqldump可以使用mysql自带的mysqldump。datax需要下载并编译。编译datax需要maven,使用maven需要java环境

一、安装openjdk

[root@CAIP131 ~]# yum install java-1.8.0-openjdk -y


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


[root@CAIP131 ~]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)


二、部署maven

2.1、从Apache官网下载:

https://maven.apache.org/download.cgi


wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.zip --no-check-certificate

2.2、建立maven目录

[root@CAIP131 ~]# mkdir /usr/local/maven


[root@CAIP131 ~]# unzip apache-maven-3.8.4-bin.zip -d /usr/local/maven


[root@CAIP131 ~]# ll /usr/local/maven


2.3 、配置环境变量

[root@CAIP131 ~]# vi .bash_profile


新增下面几行
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64
export JRE_HOME=$JAVA8_HOME/jre
export MAVEN_HOME=/usr/local/maven/apache-maven-3.8.4
export PATH=$PATH:$MAVEN_HOME/bin:$JAVA_HOME/bin


source .bash_profile 


2.4、mvn报错处理

mvn -v第一次报错

[root@CAIP131 apache-maven-3.8.4]# mvn -v
-bash: mvn: command not found


原因 MAVEN_HOME路径不对
export MAVEN_HOME=/usr/local/maven   #错误
export MAVEN_HOME=/usr/local/maven/apache-maven-3.8.4   #正确
mvn -v报错第二次报错
[root@CAIP131 ~]# mvn -v
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.


原因未执行source /etc/profile
[root@CAIP131 ~]# source /etc/profile
[root@CAIP131 ~]# mvn -v


2.5、配置maven镜像源为阿里镜像源

修改配置文件settings.xml,文件在/usr/local/maven/apache-maven-3.8.4/conf中。

[root@CAIP131 conf]# pwd
/usr/local/maven/apache-maven-3.8.4/conf
[root@CAIP131 conf]# vim settings.xml 


<mirror>
    <id>aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun-public</name>
    <url>https://maven.aliyun.com/repository/public/</url>
</mirror>

<mirror>
    <id>aliyun-spring</id>
    <mirrorOf>spring</mirrorOf>
    <name>aliyun-spring</name>
    <url>https://maven.aliyun.com/repository/spring</url>
</mirror>


注释 DataX/pom.xml 文件中的以下内容,其他组件也可能遇到问题,遇到时从pom文件删除即可

oscarwriter mongodbreader mongodbwriter

 三、安装DataX工具包

1、DataX下载地址

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

下载后解压至本地某个目录,进入bin目录,即可运行同步作业:

[root@CAIP131 ~]# cd /opt/datax/bin/


2、自检脚本:

[root@CAIP131 datax]# python bin/datax.py job/job.json


datax运行job案例时报错“位置信息错误,您提供的配置文件

解决办法: 删除datax/plugin/reader下所有.xxxx隐藏文件 注意:一定要.*er这种方式匹配文件,否则会匹配到里面的隐藏jar包

[root@CAIP131 datax]# find /opt/datax/plugin/reader/ -type f -name "._*er" | xargs rm -rf

同理也删除datax/plugin/writer/下所有._xxxx隐藏文件

[root@CAIP131 datax]# find /opt/datax/plugin/writer/ -type f -name "._*er" | xargs rm -rf


再次运行不会报错

[root@CAIP131 datax]# python bin/datax.py job/job.json



3、测试使用

测试环境: MySQL 5.7

[admin@CAIP131 ~]$ mysql -h 172.20.2.120 -uroot@sys#obce-3zones -P2883 -pPwd2022# -c -A oceanbase

image-20220301105802344

4、准备数据

mysql中的原表结构

[admin@CAIP131 tpcc-mysql-master]$ pwd
/home/admin/tpcc-mysql-master

image-20220301104405338

5、创建数据库,并导入create_table.sql 建表脚本

检查数据库

mysql> show databases;

image-20220301105002759

创建datax_test数据库

mysql> create database datax_test;

image-20220301105133943

检查新创建的数据库

mysql> show databases;

image-20220301105231960

6、进入datax_test数据库,导入create_table.sql

mysql> use datax_test;
mysql> source /home/admin/tpcc-mysql-master/create_table.sql

image-20220301105409240

7、导入测试数据

./tpcc_load -h127.0.0.1 -P3306 -d datax_test -uroot -w 2 -pPwd2022#

8、创建同步作业配置文件

生成模板文件
[admin@CAIP131 datax]$ python ./bin/datax.py -r mysqlreader -w oceanbasev10writer

image-20220301135721936

9、使用mysql登录连接到mysql

[root@CAIP131 datax]# mysql -h 127.1 -p

image-20220301142701750

检查数据库

mysql> show databases;

image-20220301142955525

创建datax_test数据库

mysql> create database datax_test;

image-20220301143112341

检查新创建的数据库

mysql> show databases;

image-20220301143140437

进入datax_test数据库,新建datax_table表插入测试数据

mysql> use datax_test;
mysql> create table datax_table(c1 int, c2 int);

image-20220301143528569

查看表数据

mysql> insert into datax_table values (1,2),(3,4);

image-20220301143835654

查看数据库和表名

mysql> select * from datax_table;

image-20220301144009110

10、在Oceanbase创建数据、库表和Schema和mysql步骤一样

使用oceanbase客户端登录数据库oceanbase

[root@CAIP131 ~]# mysql -h 172.20.2.120 -uroot@sys#obce-3zones -P2883 -pPwd2022# -c -A oceanbase

image-20220301151835344

检查数据库

mysql> show databases;

image-20220301152108569

创建datax_test数据库

mysql> create database datax_test;

image-20220301152142646

检查新创建的数据库

mysql> show databases;

image-20220301152623048

 11、在Oceanbase创建数据、库表和Schema和mysql步骤一样

 迁移之前需要在ob端创建相应的表结构,创建json文件

[root@CAIP131 bin]# vim mysql2ob.json

image-20220301164428933

执行命令启动Datax

[root@CAIP131 bin]# python ./datax.py ./mysql2ob.json

image-20220301163947218

 使用oceanbase登录数据库oceanbase

[root@CAIP131 ~]# mysql -h 172.20.2.120 -uroot@sys#obce-3zones -P2883 -pPwd2022# -c -A oceanbase

image-20220301151835344

检查数据库

[root@CAIP131 ~]# cd /opt/datax/
[root@CAIP131 datax]# vim ./bin/mysql2ob.json

 四、tpcc-mysql工具

TPC(Tracsaction Processing Performance Council) 事务处理性能协会是一个评价大型数据库系统软硬件性能的非盈利的组织,TPC-C是TPC协会制定的,用来测试典型的复杂OLTP系统的性能。Tpcc-mysql是percona基于tpcc衍生出来的产品,专用于mysql基准测试.

安装与使用

1、官网地址下载:

https://github.com/Percona-Lab/tpcc-mysql


1)或直接下载源代码
[root@CAIP131 opt]# git clone https://github.com/Percona-Lab/tpcc-mysql.git

image-20220302143330316

官网下载zip包

image-20220303115120692

 2)编译

踩坑,在make的时候提示fatal error: mysql.h不存在,报错如下:

image-20220302143924451

编译问题解决方法,下载rpm包安装mysql.h

这个rpm包官网下载对应版本就可以了,这是下载好mysql的rpm包


image-20220302144518678[root@CAIP131 mysql]# rpm -ivh mysql-community-devel-5.7.16-1.el7.x86_64.rpm 

image-20220302144443013

查找mysql.h是否存在find

[root@CAIP120 src]# find / -name mysql.h -print

image-20220303155839937

重新make测试

[root@CAIP120 src]# make

image-20220303155929474

成功make,问题解决

2、创建数据库,并导入tpcc建表脚本

使用mysql客户端登录mysql 密码Pwd123456#

[root@CAIP120 tpcc-mysql]# mysql -h 172.20.2.120 -p
Enter password: 

image-20220303182038100

检查数据库

mysql> show databases;

image-20220302154507538

创建并查看数据库

mysql> CREATE DATABASE `tpcc` DEFAULT CHARACTER SET utf8;

image-20220304095659559

查看并进入数据库

mysql> show databases;
mysql> use tpcc;

image-20220304095749224

导入create_table.sql,路径需要自行修改

image-20220303160109493

mysql> source /opt/tpcc-mysql/create_table.sql;

image-20220302155603481

3、导入测试数据(数据比较长,需要等待一会儿)

[root@CAIP120 tpcc-mysql]# ./tpcc_load -h172.20.2.120 -P3306 -d tpcc -uroot -w 2 -pPwd123456#

image-20220304095912043

查看表记录数

mysql> 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='tpcc' 
    -> order by length desc
    -> ;

image-20220304092942509

五、使用 mysqldump导入导出数据

将 mysql的表结构和数据同步到 OceanBase 的MySQL 租户中 导出mysql数据(进入目录/opt/tpcc-mysql执行,路径需要自行修改)

1、通过mysql客户端导出表结构

[root@CAIP120 tpcc-mysql]# mysqldump -h 172.20.2.120 -uroot -p -P3306 -d tpcc --set-gtid-purged=OFF --compact > tpcc_ddl.sql
Enter password: 

image-20220304100040010

检查文件中是否存在特殊语法、变量等

[root@CAIP120 tpcc-mysql]# grep -Ei "SQL_NOTES|DEFINER|MAX_ROWS" /opt/tpcc-mysql/tpcc_ddl.sql

image-20220303161528305

2、通过mysql客户端导出数据

[root@CAIP120 tpcc-mysql]# mysqldump -h 172.20.2.120 -uroot -p -P3306 --single-transaction -t tpcc  > tpcc_data.sql
Enter password:

image-20220304100505896

3、导入mysql数据到OceanBase

obclient客户端登录oceanbase数据库

obclient -h 172.20.2.120 -uroot@sys#obce-3zones -P2883 -pPwd2022# -c -A 
[root@CAIP120 opt]# obclient -h 172.20.2.120 -uroot@sys#obce-3zones -P2883 -p -c -A
Enter password: 


检查数据库

MySQL [(none)]> show databases;


创建和mysql一样的数据库

MySQL [(none)]> create database tpcc;
MySQL [(none)]> show databases;


导入表结构

MySQL [(none)]> use tpcc;
MySQL [obtest]> source /opt/tpcc-mysql/tpcc_ddl.sql


导入数据

先禁用外键约束
MySQL [tpcc]> set global foreign_key_checks=off;
MySQL [tpcc]> show global variables like '%foreign%';


执行导入数据

MySQL [obtest]> source /opt/tpcc-mysql/tpcc_data.sql


4.验证结果

MySQL [(none)]> use tpcc;
MySQL [tpcc]> show tables;


 

最后修改时间:2022-03-08 17:41:17
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论