canal数据同步的环境配置

canal数据同步的环境配置:(适用于mysql)

前提:在linux和windows系统的mysql数据库中创建相同结构的数据库和表,我的linux中mysql是用docker实现的(5.7版本),拉取mysql镜像后,当我们创建容器时,一定要记得对目录进行挂载,否则后期是无法开启logbin功能的。

1.开启mysql的logbin功能

#拉取镜像
docker pull mysql
#创建容器
docker run -p 33306:3306 
--name mysql 
-v /root/mysql/conf:/etc/mysql/mysql.conf.d 
-v /root/mysql/logs:/logs 
-v /root/mysql/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=root 
-di mysql

(1)可以通过进入mysql然后修改/etc/mysql/mysql.conf.d/mysqld.cnf文件

docker exec -it mysql /bin/bash
cd /etc/mysql/mysql.conf.d
#docker中并没有vim命令 所以可以选择安装vim
apt-get update
apt-get install -y vim
#安装完后可以进行修改

(2)也可以使用命令进行修改

docker exec myMysql bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"

  

docker exec myMysql bash -c "echo 'server-id=123454' >> /etc/mysql/mysql.conf.d/mysqld.cnf"

(3)因为进行了目录挂载所以也可以直接在宿主机上修改

然后重启mysql

docker restart myMysql

检查binlog功能是否有开启

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

log_bin是ON则代表开启了。

2.在linux中安装canal服务并启动

下载地址:

https://github.com/alibaba/canal/releases

(1)下载之后,放到目录中,先创建好目录,目录任意,linux中要有Java环境

mv 安装包 /usr/local/canal/

然后解压

tar -zvxf 安装包

(2)修改配置文件

vi conf/example/instance.properties
#需要改成自己的数据库信息(linux中mysql的ip和端口)
canal.instance.master.address=192.168.44.132:3306

#需要改成自己的数据库用户名与密码 该用户必须有权限来跨系统连接
#可以通过windows中数据库连接工具进行测试,连上就代表有权限
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal

#需要改成同步的数据库表规则,例如只是同步一下表
#canal.instance.filter.regex=.*\..*
canal.instance.filter.regex=guli_ucenter.ucenter_member

若没有权限,则给用户赋予权限

CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
GRANT SHOW VIEW, SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;

注意:

mysql 数据解析关注的表,Perl正则表达式.
多个正则之间以逗号(,)分隔,转义符需要双斜杠(\) 
常见例子:
1.  所有表:.*   or  .*\..*
2.  canal schema下所有表: canal\..*
3.  canal下的以canal打头的表:canal\.canal.*
4.  canal schema下的一张表:canal.test1
5.  多个规则组合使用:canal\..*,mysql.test1,mysql.test2 (逗号分隔)
注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤)

(3)进入bin目录下启动

cd bin
sh startup.sh

(4)关闭服务

./stop.sh

  

原文地址:https://www.cnblogs.com/jamers-rz/p/14396932.html