赞
踩
需求:高密网和低密网之间的mysql文件落地同步。 分析:解决不同网段之间的数据通讯可以采用光闸或者网闸。
解决mysql之间的同步则可以采用canal。利用canal生成数据库变化的sql落地成相应文件,让其被交换至相对网段的某个目录下。canal客户端读取该目录下的文件,执行目录下文件的sql完成数据同步。
1. canal简介:
canal是阿里巴巴的基于数据库增量日志解析,提供增量数据订阅&消费的一个开源项目。目前主要支持mysql、oracle数据库。
canal的工作原理:
原理相对比较简单:
canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议。
mysql master收到dump请求,开始推送binary log给slave(也就是canal)。
canal解析binary log对象(原始为byte流
2.canal的配置 canal分为canal客户端和服务端,canal服务端由阿里提供;
1.下载canal服务端 https://github.com/alibaba/canal/releases。 2.解压
3.配置canal-server。
4.开启mysql的binlog写入功能,建议配置binlog模式为row,修改数据库配置文件my.ini,Linux下为my.cnf。
[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server_id=1
skip-name-resolve
expire_logs_days = 10
解释:
log-bin=mysql-bin #开启binlog
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
skip-name-resolve #默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能在MySQL的授权表中使用主机名了而只能用ip格式,防止用127.0.0.1登录,mysql对ip反向解析后用localhost登录出现权限不足,拒绝登录的错误。
expire_logs_days = x #二进制日志自动删除的天数。默认值为0,表示“没有自动删除”
修改完成后重启MySql服务,执行以下语句查看是否开启binlog写入功能。
SHOW VARIABLES LIKE "log_%";
如下图所示,若log_bin为ON,则binlog写入功能已打开。
5.为数据库添加canal用户,开启做为mysql slave的相关权限,执行以下语句。
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION
CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
执行完成后,执行SELECT * FROM mysql.user;查询是否添加成功,如下图所示。
6.修改配置文件instance.properties,位于canal-server/conf/examp
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。