docker-compose 安装canal

前言

以下docker-compose文件 持久卷地址都是我们相对地址

canal docker-compose 文件

创建桥接网络

docker network create promexus_monitoring
version: '3.8'

services:
  canal-server:
    image: canal/canal-server:latest
    container_name: canal-server
    ports:
      - "11111:11111"
      - "11112:11112"
    environment:
      - canal.auto.scan=false
       # destinations名称可自定义与数据库名称无强依赖
      - canal.destinations=dtm_busi
      - canal.auto.scan.interval = 5
      - canal.instance.master.address=mysql-latest:3306
      # mysql 复制账号
      - canal.instance.dbUsername=canal
      - canal.instance.dbPassword=canal
      - canal.instance.mysql.slaveId=222
      # mysql 需要监听的数据库
      - canal.instance.filter.regex=dtm_busi.*
      - canal.instance.tsdb.enable=false 
    volumes:
      - ./canal.properties:/canal-server/conf/canal.properties
      # - ./dtm_busi/instance.properties:/canal-server/conf/dtm_busi/instance.properties
      - ./logs:/home/admin/canal-server/logs
    networks:
      - promexus_monitoring



networks:
  promexus_monitoring:
    external: true

volumes:
  db_datadd:
    driver: local

 运行

docker-compose up -d

mysql docker-compose  

version: '3.8'

services:
  db:
    image: mysql:8.0.13 
    container_name: mysql-latest
    environment:
      MYSQL_ROOT_PASSWORD: sa123456
      MYSQL_DATABASE: test
      MYSQL_USER: sa
      MYSQL_PASSWORD: sa123456
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf  # 确保缩进正确
    restart: always
    networks:
      - promexus_monitoring

volumes:
  db_data:
    driver: local

networks:
  promexus_monitoring:
    external: true


  # docker run -d \
  # --name mysql-latest \
  # -e MYSQL_ROOT_PASSWORD=sa123456 \
  # -e MYSQL_USER=sa \
  # -e MYSQL_PASSWORD=sa123456 \
  # -e MYSQL_DATABASE=test\
  # -p 3306:3306 \
  # -v db_data:/var/lib/mysql \
  # mysql:latest

my.cnf文件

[mysqld]
log_timestamps=SYSTEM
default-time-zone='+8:00'
server-id=1
log-bin=mysql-bin

binlog_format=ROW

数据库账号密码设置

CREATE USER 'canal'@'%' IDENTIFIED BY 'canal'; --创建账号密码

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; --账号密码授权

select host,user,plugin from mysql.user ;
 
ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal'; --user表plugin 需要为mysql_native_password类型


GRANT ALL PRIVILEGES ON dtm_busi.* TO 'canal'@'%'; --给canal用户授权


FLUSH PRIVILEGES; --刷新权限 重启数据库

实战

golang客户端监听,完整代码访问github客户端获取

func main() {

	// 192.168.199.17 替换成你的canal server的地址
	// example 替换成-e canal.destinations=example 你自己定义的名字
	connector := client.NewSimpleCanalConnector("localhost", 11111, "", "", "dtm_busi", 60000, 60*60*1000)
	err := connector.Connect()
	if err != nil {
		log.Println(err)
		os.Exit(1)
	}

	// https://github.com/alibaba/canal/wiki/AdminGuide
	//mysql 数据解析关注的表,Perl正则表达式.
	//
	//多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\)
	//
	//常见例子:
	//
	//  1.  所有表:.*   or  .*\\..*
	//	2.  canal schema下所有表: canal\\..*
	//	3.  canal下的以canal打头的表:canal\\.canal.*
	//	4.  canal schema下的一张表:canal\\.test1
	//  5.  多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)

	err = connector.Subscribe(".*\\..*")
	if err != nil {
		log.Println(err)
		os.Exit(1)
	}

	for {

		message, err := connector.Get(100, nil, nil)
		if err != nil {
			log.Println(err)
			os.Exit(1)
		}
		batchId := message.Id
		if batchId == -1 || len(message.Entries) <= 0 {
			time.Sleep(3 * time.Second)
			fmt.Println("===没有数据了===")
			continue
		}

		printEntry(message.Entries)

	}
}

监听到数据变更

参考资料

Canal下载、部署和入门(详细)-CSDN博客

docker-compose-canal-server.yml · 鱼皮花生/docker-compose - Gitee.com

docker-compose 部署 Canal(直击docker-compose配置文件)_docker-compose安装 canal server admin-CSDN博客

https://www.cnblogs.com/chenyuanbo/p/16184150.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值