1 实验环境
mysql数据库使用的是maridb, oceanbase集群用的是obd自动部署的单节点集群。
2 使用 mysqldump 将 mysql的表结构和数据同步到 OceanBase 的MySQL 租户中
mysql数据库中的数据由Percona tpcc-mysql产生,这个工具主要是用于MySQL数据库的TPCC测试,产生的数据符合TPCC测试标准。首先下载编译tpcc-mysql工具:
[root@localhost ~]# git clone https://github.com/Percona-Lab/tpcc-mysql
[root@localhost tpcc-mysql]# pwd
/root/tpcc-mysql/src
[root@localhost src]# make
git克隆项目至本地后进入到项目目录下src目录,运行make命令即可。编译成功后在项目目录下生成名为tpcc_load的问题可用于载入数据。
登陆MySQL数据库创建数据库,执行tpcc-mysql目录下的建表脚本
[root@localhost tpcc-mysql]# mysqladmin -uroot -p'' create sysben_test;
mysql> use sysben_test;
mysql> source create_table.sql
使用tpcc_load工具装载数据,-w参数指定仓库个数
[root@localhost ~]# ./tpcc_load -h127.0.0.1 -P 3306 -d sysbench_test -uroot -p'' -w 2
数据装载完毕,检验无误后,使用mysqldump进行数据库表结构导出
[root@localhost ~]# mysqldump -h 127.0.0.1 -P3306 -uroot -p'rooT@123' -d sysben_test --compact > sysben_ddl.sql
检查导出的表结构文件
[root@localhost ~]# head -40 sysben_ddl.sql
/!40101 SET @saved_cs_client = @@character_set_client /;
/!50503 SET character_set_client = utf8mb4 /;
CREATE TABLE `customer` (
`c_id` int NOT NULL,
`c_d_id` tinyint NOT NULL,
`c_w_id` smallint NOT NULL,
`c_first` varchar(16) DEFAULT NULL,
`c_middle` char(2) DEFAULT NULL,
`c_last` varchar(16) DEFAULT NULL,
`c_street_1` varchar(20) DEFAULT NULL,
`c_street_2` varchar(20) DEFAULT NULL,
`c_city` varchar(20) DEFAULT NULL,
`c_state` char(2) DEFAULT NULL,
`c_zip` char(9) DEFAULT NULL,
`c_phone` char(16) DEFAULT NULL,
`c_since` datetime DEFAULT NULL,
`c_credit` char(2) DEFAULT NULL,
`c_credit_lim` bigint DEFAULT NULL,
`c_discount` decimal(4,2) DEFAULT NULL,
`c_balance` decimal(12,2) DEFAULT NULL,
`c_ytd_payment` decimal(12,2) DEFAULT NULL,
`c_payment_cnt` smallint DEFAULT NULL,
`c_delivery_cnt` smallint DEFAULT NULL,
`c_data` text,
PRIMARY KEY (`c_w_id`,`c_d_id`,`c_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
编辑一下,去掉其中的COLLATE=utf8mb4_0900_ai_ci及ENGINE=Innodb。
导出数据
[root@localhost ~]# mysqldump -h 127.0.0.1 -P3306 -uroot -p'rooT@123' -t sysben_test --compact > sysben_data.sql
将导出的文件拷贝至/home/admin目录下,登陆Oceanbase集群,相应租户下,创建数据库,运行
表创建脚本和数据导入脚本
obclient -h127.0.0.1 -uroot@my_tenant -P2883 -p -c -A test
MySQL [test]> source sysben_ddl.sql;
MySQL [test]> source sysben_data.sql
脚本运行过程中没有报错,选择一个表,导入的数据。
MySQL [test]> select count(*) from orders;
+----------+
| count(*) |
+----------+
| 600000 |
+----------+
1 row in set (1.447 sec)
表中的记录数同原表相同。
2 使用 datax 离线同步 MySQL 表 到 OceanBase 的 MySQL 租户
下载jdk,设置需要的环境变量
[root@localhost ~]# yum -y install java-1.8.0-openjdk.x86_64
下载并解压datax
[root@localhost datax]# wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
[root@localhost datax]# tar -zxvf datax.tar.gz -C /usr/local
运行一下datax自带的测试job
[root@localhost datax]# bin/datax.py /usr/local/datax/job/job.json
022-01-19 03:45:21.630 [main] WARN ConfigParser - 插件[streamreader,streamwriter]加载失败,1s后重试... Exception:Code:
[Common-00], Describe:[您提供的配置文件存在错误信息,请检查您的作业配置 .] - 配置信息错误,您提供的配置文件[/usr/local/d
atax/plugin/reader/._drdsreader/plugin.json]不存在. 请检查您的配置文件.
2022-01-19 03:45:22.637 [main] ERROR Engine -
经DataX智能分析,该任务最可能的错误原因是:
com.alibaba.datax.common.exception.DataXException: Code:[Common-00], Describe:[您提供的配置文件存在错误信息,请检查您的
作业配置 .] - 配置信息错误,您提供的配置文件[/usr/local/datax/plugin/reader/._drdsreader/plugin.json]不存在. 请检查您的
配置文件.
这里出错了,看了错误信息,完全不知道怎样解决,百度一下找到了解决方案,
rm -rf /usr/local/datax/plugin//._
运行上面的rm命令之后,再进行测试就成功了
[root@localhost datax]# bin/datax.py /usr/local/datax/job/job.json
2022-01-19 03:53:12.059 [main] INFO VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
2022-01-19 03:53:12.066 [main] INFO Engine - the machine info =>
2022-01-19 03:53:22.249 [job-0] INFO JobContainer -
--------
--------
--------
任务启动时刻 : 2022-01-19 03:53:12
任务结束时刻 : 2022-01-19 03:53:22
任务总计耗时 : 10s
任务平均流量 : 253.91KB/s
记录写入速度 : 10000rec/s
读出记录总数 : 100000
读写失败总数 : 0
准备数据离线同步需要的job json文件,源库使用的是mysql自带sakila示例数据库,同步的表是payment,同步至oceanbase的test数据库下。
"job": {
"setting": {
"speed": {
"channel": 1
},
"errorLimit": {
"record": 0,
"percentage": 0.1
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "root123",
"column": [
"*"
],
"connection": [
{
"table": [
"payment"
],
"jdbcUrl": ["jdbc:mysql://127.0.0.1:3306/sakila?useUnicode=true&characterEncoding=utf8"]
}
]
}
},
"writer": {
"name": "oceanbasev10writer",
"parameter": {
"obWriteMode": "insert",
"column": [
"*"
],
"preSql": [
"truncate table orders"
],
"connection": [
{
"jdbcUrl": "||_dsc_ob10_dsc_||obcluster:sys||_dsc_ob10_dsc_||jdbc:oceanbase://127.0.0.1:2883/test?useLocalSessionState=true&allowBatch=true&allowMultiQueries=true&rewriteBatchedStatements=true",
"table": [
"payment"
]
}
],
"username": "root",
"password":"",
"writerThreadCount":10,
"batchSize": 1000,
"memstoreThreshold": "0.9"
}
}
}
]
}
}
运行job,将数据同步至oceanbase数据库
[root@localhost datax]#bin/datax.py job/my_job.json
--------
--------
2022-01-20 00:53:58.619 [job-0] INFO JobContainer -
任务启动时刻 : 2022-01-20 00:53:45
任务结束时刻 : 2022-01-20 00:53:58
任务总计耗时 : 12s
任务平均流量 : 50.84KB/s
记录写入速度 : 1604rec/s
读出记录总数 : 16049
读写失败总数 : 0
同步任务执行成功,没有读写失败,速度是50.84KB/s。
登陆目的库检查一下:
MySQL [test]> select count(*) from payment;
+----------+
| count(*) |
+----------+
| 16049 |
+----------+
1 row in set (0.014 sec)
记录数同源库一致,同步成功。