本地搭建canal环境,使用canal-php将插入mysql的数据同步至es

本文档介绍了如何在本地环境设置canal,通过canal-php将MySQL的数据实时同步到Elasticsearch。首先讲解了MySQL主备复制和canal的工作原理,接着详细描述了canal的安装步骤、数据库用户创建、配置以及测试过程,包括创建测试表、插入数据,并展示了一个用于插入数据到ES的test.php代码示例,验证了数据同步的正确性。
摘要由CSDN通过智能技术生成

参考 https://github.com/alibaba/canal

简介

吾乃搬运工

工作原理

搬过来意思意思

MySQL主备复制原理
  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
canal 工作原理
  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  • canal 解析 binary log 对象(原始为 byte 流)

详细的可以去github上查看,或者自行百度,这里就不粘了,累!

安装

参考资料 https://github.com/alibaba/canal/wiki/Docker-QuickStart

这边就直接使用本地编译的方式

git clone git@github.com:alibaba/canal.git
cd canal/docker && sh build.sh

执行完就会像我这样阿巴阿巴的一大串
累啊
结束了
OK,这样就结束了,接下来按他文档里说的docker下面有run.sh的脚本,我们运行下

sh run.sh -e canal.auto.scan=false \
      -e canal.destinations=test \
      -e canal.instance.master.address=172.17.0.4:3306  \
      -e canal.instance.dbUsername=canal  \
      -e canal.instance.dbPassword=123456  \
      -e canal.instance.connectionCharset=UTF-8 \
      -e canal.instance.tsdb.enable=true \
      -e canal.instance.gtidon=false  \
docker run -d -it -h 192.168.10.21 -e canal.auto.scan=false -e canal.destinations=test -e canal.instance.master.address=172.17.0.4:3306 -e canal.instance.dbUsername=canal -e canal.instance.dbPassword=123456 -e canal.instance.connectionCharset=UTF-8 -e canal.instance.tsdb.enable=true -e canal.instance.gtidon=false --name=canal-server -p 11110:11110 -p 11111:11111 -p 11112:11112 -p 9100:9100 -m 4096m canal/canal-server
3c3287051269a5775e48bc59d8875192f889601986a006348241cb5ad1d3a78e
docker: Error response from daemon: driver failed programming external connectivity on endpoint canal-server (0c94b850d47a039a92f291ca203233564d042ac8db7f51c6bcf18ad807ccf58f): Bind for 0.0.0.0:9100 failed: port is already allocated

问题:9100端口问题,本地eshead监听9100,先停掉

数据库创建用户

 #连接msql
 mysql -u -p
 # 进行创建用户赋权
 grant all privileges on *.* to canal@'%' identified by '123456';
 #刷新
 FLUSH PRIVILEGES;

不清楚的可以百度下Mysql创建用户及赋权

canal-php

本次测试canal-php来实现,地址:https://github.com/xingwenge/canal-php

# 克隆
git clone https://github.com/xingwenge/canal-php.git
cd canal-php
# 更新
composer update
# 呃呃呃呃 又报错了
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - clue/socket-raw[v1.4.0, ..., v1.5.0] require ext-sockets * -> it is missing from your system. Install or enable PHP's sockets extension.
    - Root composer.json requires clue/socket-raw ^1.4 -> satisfiable by clue/socket-raw[v1.4.0, v1.4.1, v1.5.0].

To enable extensions, verify that they are enabled in your .ini files:
    -
    - /usr/local/etc/php/conf.d/docker-php-ext-gd.ini
    - /usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini
    - /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini
    - /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

# 好吧 没有sockets扩展导致 安装下
 docker-php-ext-install sockets

数据库配置

更新mysql配置,参考

https://github.com/alibaba/canal/wiki/QuickStart

[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

开始测试

接下来就开始测试了,进入刚刚的canal-php目录,运行目录下src/sample/client.php

#进入目录
cd canal-php
# 运行 client里的配置 需要根据自己之前搭建的canal-server修改
# 上面运行的时候 canal.destinations=test 所以需要修改默认的destination 修改为 $client->subscribe("1001", "test", ".*\\..*"); 
# 修改完成 开始启动
php src/sample/client.php

一一
这样就启动起来了。

我们先检测测试表user

CREATE TABLE `user` (
	`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
	`user
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值