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

0142.C 使用CloudCanal实时同步(全量_增量_迁移)MySQL数据到OceanBase中

rundba 2022-03-05
1713



使用CloudCanal同步MySQL到OceanBase中,数据进行全量/增量同步进行展示。

注:当前只是测试基础功能,未涉及大量生产数据。



0. ENV

0.1 基础环境

CentOS 7.6;

mysql 5.7.33;

OceanBase-CE 3.1.2(社区版,以下简称OB);

CloudCanal 2.2.0.6-alpha(社区版,以下简称CC,还未正式发布).


0.2 部署架构

mysql单机部署:192.168.80.121

OB  单机上部署3个observer部署: 192.168.80.110:2881/3881/4881,1个obproxy 2883

CC单机docker容器部署:192.168.80.120



源端Mysql数据库prod.demo 1w条记录,使用CC同步mysql的prod.demo全量和增量到目标端OB中,prod.demo -> prod.demo。



1. 前置条件

首先参考CloudCanal安装部署参考文档完成CloudCanal社区版的安装和部署,部署详见文末参考章节。


支持条件:

支持MySQL5.1.X, 5.5.X, 5.6.X,5.7.X,8.X;

目前CloudCanal 2.2.0.6-alpha为测试版本,2.2正式版将于近期发布;

目前支持OceanBase社区版3.0-3.1.2,暂不支持企业版ORACLE租户。



2. 添加数据源

登录CloudCanal平台,mysql2OB需要先创建源端mysql数据源和目标端OB数据源,再创建任务。


2.1 创建源端mysql数据源

数据源管理 -> 新增数据源 -> 自建数据库 -> MYSQL,

MYSQL 数据源设置:

网络地址: 内网,192.168.80.121:3306;

认证方式:账号密码

账号:root

密码:******

点击“测试连接”,提示“测试连接成功”即可。


描述(可选):mysql_121

点击“新增数据源”。


创建的数据源名称为:my-9l33gd33m4ghr27 (mysql_121),后续创建任务时

用到。



2.2 创建目标端OceanBase数据源

数据源管理 -> 新增数据源 -> 自建数据库 -> OceanBase,

OceanBase 数据源设置:

Client地址: 内网,192.168.80.110:2883,填写obproxy地址

认证方式:账号密码

账号:root@mysql_t1#rundba

密码:******

点击“测试连接”,提示“测试连接成功”即可。


描述(可选):[mysql2OB]-OB

点击“新增数据源”。


创建的数据源名称为:ob-z65k8sp17i8g95i(OceanBase_110),后续创建任务时用到。




3. 任务创建

3.1 创建任务前mysql测试数据准备[mysql数据库中执行]

1) 源端mysql数据库准备-prod

create database prod default character set utf8mb4 collate utf8mb4_bin;


2) 在prod数据库中创建带主键的demo表

use prod;
DROP TABLE IF EXISTS demo;
CREATE TABLE demo (id int not null primary key,name varchar(10));


3) 创建存储过程pro_demo

DROP PROCEDURE IF EXISTS pro_demo;


DELIMITER &&
CREATE PROCEDURE pro_demo(IN inr int)
BEGIN
DECLARE i INT DEFAULT 0;
START TRANSACTION;
WHILE i<inr DO
INSERT INTO demo(id,name) values(i,'rundba.com');
SET i=i+1;
END WHILE;
COMMIT;
END &&
DELIMITER ;


4) 模拟产生1w条记录

生产1w条测试数据,可根据需求,自己指定任意记录数

call pro_demo(10000);


当前已生成1w条记录

mysql> select count(*) from prod.demo;
+----------+
| count(*) |
+----------+
| 10000 |
+----------+
1 row in set (0.00 sec)


5) 目标端OceanBase数据库准备-prod[OceanBase中执行]

MySQL [oceanbase]> create database prod;
Query OK, 1 row affected (0.110 sec)


3.2 创建任务

添加好数据源之后可以按照如下步骤进行数据迁移、同步任务的创建。


1) 开始创建任务

任务管理 -> 创建任务

绑定集群,选择默认集群。


2) 源&目标设置

选择源库和目标库设置

[源库]

部署类型:自建数据库

源类型:mysql

网络类型:内网

源实例:选择前面创建的mysql数据源 my-9l33gd33m4ghr27(mysql_121),点击“测试连接”,直到提示成功。

字符集:utf8mb4,支持的其它mysql字符集utf8、gbk


[目标库]

部署类型:自建数据库

目标类型:OceanBase

网络类型:内网

目标实例:选择前面创建的OceanBase数据源ob-z65k8sp17i8g95i(OceanBase_110),点击“测试连接”,直到提示成功。

字符集:utf8


[数据库映射]

选择默认模式。

prod到prod同步。


点击下一步。


3) 功能配置


增量同步,默认,点击下一步。


报错处理-mysql开启binlog:


如果提示'log_bin'参数值必须为 1,则需要设置源端mysql参数:

vim /etc/my.cnf    #在[mysqld]下面添加
log-bin=master-a-bin
binlog-format=ROW
server-id=1


启用二进制日志log-bin;

binlog格式为ROW;

设置一个全局唯一的server_id为1;


重启MySQL服务:

systemctl restart mysqld


再次确认

mysql> show variables like "%bin%";


4) 表&action过滤

默认,下一步。

注:目标端demo(待创建),不需要手工创建。


5) 数据处理

默认,下一步。


6) 创建确认

默认,创建任务。

任务创建后,会自动完成结构迁移、全量、增量阶段。


7) 创建完成


8) 同步数据确认

此时,目标端OceanBase中数据已经生成。

[admin@ob3 ~]$ obclient -h192.168.80.110 -P2883 -uroot@mysql_t1#rundba oceanbase -c -A -p'Demo_415'
Welcome to the OceanBase. Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 5.6.25 OceanBase 3.1.2 (r10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d) (Built Dec 30 2021 02:47:29)


Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


MySQL [oceanbase]> select count(1) from prod.demo;
+----------+
| count(1) |
+----------+
| 10000 |
+----------+
1 row in set (0.018 sec)


3.3 增量验证--成功

1) 源端新增一条记录

mysql> insert into demo values(10000,'mysql2ob');
Query OK, 1 row affected (0.00 sec)


mysql> commit;
Query OK, 0 rows affected (0.00 sec)


2) 目标端查询是否成功--成功

MySQL [oceanbase]> select * from prod.demo where id >= 9999;
+-------+------------+
| id | name |
+-------+------------+
| 9999 | rundba.com |
| 10000 | mysql2ob |
+-------+------------+
2 rows in set (0.003 sec)


3) 增量排错参考

https://www.askcug.com/topic/142


3.4 更新验证--成功

1) 源端更新一条记录

mysql> update demo set name='mysql到OB' where id='10000';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0


mysql> commit;
Query OK, 0 rows affected (0.00 sec)


2) 目标端查询是否成功--成功

MySQL [oceanbase]> select * from prod.demo where id = 10000;
+-------+------------+
| id | name |
+-------+------------+
| 10000 | mysql到OB |
+-------+------------+
1 row in set (0.007 sec)



3.5 删除验证--成功

1) 源端删除一条记录

mysql> delete from demo where id=10000;
Query OK, 1 row affected (0.00 sec)


2) 目标端查询是否成功--成功

MySQL [oceanbase]> select * from prod.demo where id = 10000;
Empty set (0.001 sec)


MySQL [oceanbase]> select * from prod.demo where id >= 9999;
+------+------------+
| id | name |
+------+------------+
| 9999 | rundba.com |
+------+------------+
1 row in set (0.001 sec)



4. 小结

伴随着数据多元化、国产数据库的崛起,各种数据之间数据同步、转换、数仓构建等产生大量需求。

同步CC作为阿里系成员创业构建的一款数据同步工具,对polarDB-X、OceanBase、StarRocks等进行了支持,测试环境正常运行,大批量生产环境还有待考验,其生存并得以茁壮成长还需经历时代的考验。



5. CC支持数据源参考

按当前版本来看,截止2022-03-03,CC支持的数据源如下:

源端支持的数据源:MySQL、PostgreSQL、SQL Server、Greenplum、Oracle、Kafka、RocketMQ、RabbitMQ、MongoDB。

目标端支持的数据源:

MySQL、TiDB、PostgreSQL、Greenplum、ElasticSearch、ClickHouse、Kafka、RocketMQ、RabbitMQ、PolarDB-X、Hive、Oracle、Kudu、MongoDB、SQL Server、Redis、StarRocks、OceanBase。




6. 参考

https://doc-cloudcanal.clougence.com/quick/quick_start
https://www.askcug.com/topic/262/5%E5%88%86%E9%92%9F%E6%90%9E%E5%AE%9Amysql-postgresql-oracle%E5%88%B0OceanBase%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB%E5%90%8C%E6%AD%A5-cloudcanal%E5%AE%9E%E6%88%98
https://docs.OceanBase.com/zh-cn/main/loading/CloudCanal_loading




- 完 -



旨在交流,不足之处,还望抛砖。

作者:王坤,微信公众号:rundba,欢迎转载,转载请注明出处。

如需公众号转发,请联系wx: landnow。




 






                             长按二维码                                   


欢迎加入>>国产DB学习交流群


       

   请注明:来自rundba,加入国产DB学习交流群                

             


文章转载自rundba,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论