使用canal和canal_mysql_nosql_sync同步mysql数据
来源:互联网 发布:js替换图片路径 编辑:程序博客网 时间:2024/06/01 08:11
场景:
有两个独立的项目A和B,都使用mysql做数据库,
其中项目A中有一个表存储新闻资讯,字段有新闻id,标题title,类型type,内容data。
后来项目B也需要这个表的数据,但项目B用了两个表:一个表存新闻id,标题title,类型type,另一个表存储新闻id和新闻内容data。
这时如果要把项目A中实时变化的数据同步项目B中,显然传统的同步方式就不满足了
实现思路
利用canal获取变化数据
利用canal_mysql_nosql_sync存入redis队列
(https://github.com/liukelin/canal_mysql_nosql_sync)
起一个守护脚本一直读取该redis,将产生的数据写入到新库
实施步骤
一.在项目A中配置canal
1.确定服务器上有java环境,如果没有需安装下java
# java -versionjava version "1.8.0_121"
2.获取canal包
访问https://github.com/alibaba/canal/releases,下载相应的版本本次以1.0.24为例wget https://github.com/alibaba/canal/releases/download/canal-1.0.24/canal.deployer-1.0.24.tar.gz
3.解压并配置
详细的配置参数可参考https://github.com/alibaba/canal/wiki/AdminGuide
这里不多赘述
将安装包解压后,默认有如下文件夹
# lsbin conf lib logs
编辑instance.properties文件
vim ./conf/example/instance.properties配置好数据库的相关信息canal.instance.master.address = 127.0.0.1:3306# username/passwordcanal.instance.dbUsername = rootcanal.instance.dbPassword = root123456canal.instance.defaultDatabaseName = newscanal.instance.connectionCharset = UTF-8配置下正则表达式# table regexcanal.instance.filter.regex = .* # table black regexcanal.instance.filter.black.regex = platform_news\\..*这里注意两点:1)数据库的用户需要有slave权限;2)正则表达式中,如果只配置白名单,在通过redis读取时,发现没生效,需同时配置黑名单才生效
配置完成后,启动服务
sh bin/startup.sh启动完成后,会看到有个端口号为11111的进程
二.在项目B中部署canal_mysql_nosql_sync
1.获取canal_mysql_nosql_sync
git clone https://github.com/liukelin/canal_mysql_nosql_sync
2配置
cd canal_mysql_nosql_sync/canal-client/confvim canal.properties配置好对应参数即可
3启动
sh ./canal_mysql_nosql_sync/canal-client/start_canal_client.sh正常启动后,去项目A的表中改个数据,可立即看到变化
三.在项目B中通过脚本获取redis数据,并写入到项目B的数据库中
脚本就不多赘述了,任意一个语言都可以(只要能操作redis和mysql即可XD):
1.连接redis,获取redis中变化的数据,redis的数据结构如下
eventType :操作类型(UPDATE/INSERT/DELETE)db: 涉及库table: 涉及表before:变更前数据after: 变更后数据time: 操作时间
2.提取出变化的数据,根据eventType,将数据修改到项目B的数据库中
- 使用canal和canal_mysql_nosql_sync同步mysql数据
- mysql跨网域canal数据同步
- 使用canal进行mysql数据同步到Redis
- 使用canal进行mysql数据同步到Redis
- 使用canal进行mysql数据同步到Redis
- 利用Canal完成Mysql数据同步Redis
- 使用 Binlog 和 Canal 从 MySQL 抽取数据
- 数据同步 canal
- 【持续更新】mysql与canal,实现数据同步
- canal 数据同步的一个重要点
- 数据同步canal 疑点——内存
- mysql在centos上的安装以及canal数据同步配置
- centos7 下安装canal,并实现将mysql数据同步到redis
- 基于canal实现mysql、oracle的数据库实时同步
- 基于canal实现mysql、oracle的数据库实时同步
- Redis和MySQL数据同步及Redis使用场景
- 实时抓取MySQL的更新数据到Hadoop canal
- 使用Navicat for MySQL数据库结构同步和数据同步的方法
- LeetCode-E-Isomorphic Strings
- 动态规划之数字三角形
- 阿里云服务器 ECS Linux 安装 VNC Server 实现图形化访问的方法
- 动规之小鑫爬山
- Java自动装箱与拆箱
- 使用canal和canal_mysql_nosql_sync同步mysql数据
- hdu 1532 Drainage Ditches(最大流)
- 【深度学习】cs231n-assignment1
- 开源项目spring-shiro-training思维导图,让项目不再难懂
- 动规之最长上升子序列
- C++对象模型-编译器如何处理函数返回一个对象
- CodeForces 339D Xenia and Bit Operations (线段树水题)
- 深入javascript数据存取
- JAVA版QQ动态口令