阿里开源中间件canal实现mysql数据库同步,零侵入不写代码实现,也可以通过整合到项目程序实现更加灵活的控制,简单几步实现高性能准实时多数据库多数据表的数据同步,可在windows和Linux部署

阿里开源中间件canal实现mysql数据库同步,零侵入不写代码实现,也可以通过整合到项目程序实现更加灵活的控制,简单几步实现高性能准实时多数据库多数据表的数据同步,可在windows和Linux部署。

准备

一、需要同步的MySQL配置

对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下

[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

注意:针对阿里云 RDS for MySQL , 默认打开了 binlog , 并且账号默认具有 binlog dump 权限 , 不需要任何权限或者 binlog 设置,可以直接跳过这一步
授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant 进行授权。

CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
--或者这样更好: GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

允许mysql远程连接:

grant all privileges on *.* to 'canal' @'%' identified by '2143';
flush privileges;

二、下载所需软件

下载地址:https://download.csdn.net/download/u014374009/12009411

点击下载


1、解压完成后,进入 canal.deployer-1.1.5-SNAPSHOT 目录,可以看到如下结构:
在这里插入图片描述
\conf\example 目录下,修改instance.properties,如下:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、解压完成后,进入 canal.adapter-1.1.5-SNAPSHOT 目录,可以看到如下结构:
在这里插入图片描述
进入 /conf 目录下,如图:
在这里插入图片描述
修改 application.yml 文件的相关内容:
在这里插入图片描述

进入到 \conf\rdb 目录下,需要同步的表修改映射信息:
在这里插入图片描述
特别注意:每个表 对应 一个 .yml 文件映射信息。

三、在数据库进行相关测试

在这里,附上作者进行测试的数据表,方便直接测试。
sql 脚本如下:

/*
SQLyog v10.2 
MySQL - 5.5.56 : Database - test
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `test`;

/*Table structure for table `class_info` */

DROP TABLE IF EXISTS `class_info`;

CREATE TABLE `class_info` (
  `id` varchar(55) DEFAULT NULL,
  `name` varchar(55) DEFAULT NULL,
  `remark` varchar(55) DEFAULT NULL,
  `rownum` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`rownum`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

/*Table structure for table `tb_user` */

DROP TABLE IF EXISTS `tb_user`;

CREATE TABLE `tb_user` (
  `id` bigint(20) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `email` varchar(64) DEFAULT NULL,
  `nickname` varchar(64) NOT NULL,
  `password` varchar(32) DEFAULT NULL,
  `sex` int(11) DEFAULT NULL,
  `sign` varchar(64) NOT NULL,
  `user_id` varchar(11) DEFAULT NULL,
  `username` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UK_ig0bbysxr6nnpxo4qn2btdcc8` (`nickname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

把这份脚本,在两个不同的数据库或者不同的机器上的mysql中,进行执行,创建数据表。最后,在主数据库中的数据表进行 增、删、改 ,从数据库对应的数据表的数据会实时根据变化。

发布了52 篇原创文章 · 获赞 37 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u014374009/article/details/103338377