使用mysqldump和datax从mysql数据迁移到OceanBase
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文档
机器信息
机器类型 | 主机配置 | 备注 |
---|---|---|
OS | Centos 7.4 | |
中控机 /OBD | CPU:8C | 内存:16G |
目标机器 /OBserver | CPU:8C | 内存:32G |
系统盘 / | dev/vda 50G | LVS分区、文件系统:EXT4 |
数据盘 /data | dev/vdb 100G | GPT分区、文件系统:xfs |
事务日志盘 /redo | dev/vdc 100G | GPT分区、文件系统:xfs |
机器划分
角色 | 机器IP | 备注 |
---|---|---|
OBD | 172.20.2.131 | 中控机 |
OBserver | 172.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 | |
OBproxy | 172.20.2.120 | {2883,2884} 反向代理 |
172.20.2.121 | {2883,2884} 反向代理 | |
172.20.2.122 | {2883,2884} 反向代理 | |
OBAgent | 172.20.2.120 | 监控采集框架 默认端口 8088、8089 |
172.20.2.121 | 监控采集框架 默认端口 8088、8089 | |
172.20.2.122 | 监控采集框架 默认端口 8088、8089 | |
OBclient | 172.20.2.131 | OB命令行客户端 |
安装部署版本
软件名 | 版本 | 安装方式 |
---|---|---|
java | 1.8.0 | yum安装 |
maven | 3.8.4 | unzip |
obclient | 2.0.0-2.el7.x86_64 | yum安装 |
oceanbase-ce | 3.1.2.el7.x86_64 | yum安装 |
datax | python安装 | |
mysql | 5.7.16 | yum安装 |
工具准备 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文件删除即可
三、安装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
4、准备数据
mysql中的原表结构
[admin@CAIP131 tpcc-mysql-master]$ pwd
/home/admin/tpcc-mysql-master
5、创建数据库,并导入create_table.sql 建表脚本
检查数据库
mysql> show databases;
创建datax_test数据库
mysql> create database datax_test;
检查新创建的数据库
mysql> show databases;
6、进入datax_test数据库,导入create_table.sql
mysql> use datax_test;
mysql> source /home/admin/tpcc-mysql-master/create_table.sql
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
9、使用mysql登录连接到mysql
[root@CAIP131 datax]# mysql -h 127.1 -p
检查数据库
mysql> show databases;
创建datax_test数据库
mysql> create database datax_test;
检查新创建的数据库
mysql> show databases;
进入datax_test数据库,新建datax_table表插入测试数据
mysql> use datax_test;
mysql> create table datax_table(c1 int, c2 int);
查看表数据
mysql> insert into datax_table values (1,2),(3,4);
查看数据库和表名
mysql> select * from datax_table;
10、在Oceanbase创建数据、库表和Schema和mysql步骤一样
使用oceanbase客户端登录数据库oceanbase
[root@CAIP131 ~]# mysql -h 172.20.2.120 -uroot@sys#obce-3zones -P2883 -pPwd2022# -c -A oceanbase
检查数据库
mysql> show databases;
创建datax_test数据库
mysql> create database datax_test;
检查新创建的数据库
mysql> show databases;
11、在Oceanbase创建数据、库表和Schema和mysql步骤一样
迁移之前需要在ob端创建相应的表结构,创建json文件
[root@CAIP131 bin]# vim mysql2ob.json
执行命令启动Datax
[root@CAIP131 bin]# python ./datax.py ./mysql2ob.json
使用oceanbase登录数据库oceanbase
[root@CAIP131 ~]# mysql -h 172.20.2.120 -uroot@sys#obce-3zones -P2883 -pPwd2022# -c -A oceanbase
检查数据库
[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
官网下载zip包
2)编译
踩坑,在make的时候提示fatal error: mysql.h不存在,报错如下:
编译问题解决方法,下载rpm包安装mysql.h
这个rpm包官网下载对应版本就可以了,这是下载好mysql的rpm包
[root@CAIP131 mysql]# rpm -ivh mysql-community-devel-5.7.16-1.el7.x86_64.rpm
查找mysql.h是否存在find
[root@CAIP120 src]# find / -name mysql.h -print
重新make测试
[root@CAIP120 src]# make
成功make,问题解决
2、创建数据库,并导入tpcc建表脚本
使用mysql客户端登录mysql 密码Pwd123456#
[root@CAIP120 tpcc-mysql]# mysql -h 172.20.2.120 -p
Enter password:
检查数据库
mysql> show databases;
创建并查看数据库
mysql> CREATE DATABASE `tpcc` DEFAULT CHARACTER SET utf8;
查看并进入数据库
mysql> show databases;
mysql> use tpcc;
导入create_table.sql,路径需要自行修改
mysql> source /opt/tpcc-mysql/create_table.sql;
3、导入测试数据(数据比较长,需要等待一会儿)
[root@CAIP120 tpcc-mysql]# ./tpcc_load -h172.20.2.120 -P3306 -d tpcc -uroot -w 2 -pPwd123456#
查看表记录数
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
-> ;
五、使用 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:
检查文件中是否存在特殊语法、变量等
[root@CAIP120 tpcc-mysql]# grep -Ei "SQL_NOTES|DEFINER|MAX_ROWS" /opt/tpcc-mysql/tpcc_ddl.sql
2、通过mysql客户端导出数据
[root@CAIP120 tpcc-mysql]# mysqldump -h 172.20.2.120 -uroot -p -P3306 --single-transaction -t tpcc > tpcc_data.sql
Enter password:
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;