阿裡開源中間件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;
二、下載下傳所需軟體
1、解壓完成後,進入 canal.deployer-1.1.5-SNAPSHOT 目錄,可以看到如下結構:

到 \conf\example 目錄下,修改instance.properties,如下:
2、解壓完成後,進入 canal.adapter-1.1.5-SNAPSHOT 目錄,可以看到如下結構:
進入 /conf 目錄下,如圖:
修改 application.yml 檔案的相關内容:
進入到 \conf\rdb 目錄下,需要同步的表修改映射資訊:
特别注意:每個表 對應 一個 .yml 檔案映射資訊。
三、在資料庫進行相關測試
/*
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 */;