DockerCompose方式部署Canal同步MySQL至ES
Canal
Canal 简介
主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
canal的工作原理就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 dump协议,MySQL mater收到canal发送过来的dump请求,开始推送binary log给canal,然后canal解析binary log,再发送到存储目的地,比如MySQL,Kafka,Elastic Search等等。
canal的数据同步不是全量的,而是增量。基于binary log增量订阅和消费
原理:
Canal-Server监听MySQL Binlog
Canal-Adapter将数据同步到其他数据库
前提条件
- mysql开启Binlog,并且为ROW模式
- 使用canal连接MySQL的用户需要拥有对应的从站等权限
- MySQL与ES同步的表需要提前将表结构手动同步到ES结构中
注意:canal是增量同步,对旧数据推荐使用CloudCanal工具进行一键同步
成功部署后我所挂载的Canal server与adapter的目录结构
DockerCompose部署Mysql开启Binlog
Yaml文件配置
mysql:
image: mysql:5.7.27 # 此处镜像使用mysql5
container_name: container-mysql # 容器名称
restart: always # 重启方式
privileged: true
environment:
TZ: Asia/Shanghai
LANG: C.UTF-8
MYSQL_ROOT_PASSWORD: 此处为MySQL Root账号密码
MYSQL_DATABASE: 数据库名称
MYSQL_USER: 用户名
MYSQL_PASSWORD: 密码
command:
--server_id=100 #主站ID
--log-bin=/var/lib/mysql/mysql-bin #开启binlog的文件名
--sync_binlog=1
--binlog-ignore-db=mysql
--binlog_format=ROW # binlog格式为ROW
--expire_logs_days=7 # binlog文件存活时间
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci