canal实现mysql数据同步

一、环境准备

  • CentOS7
  • Canal 1.1.6
  • MySQL 5.7
  • ElasticSearch 7.4.2
  • Kibana 7.4.2

二、docker安装

参考地址: https://docs.docker.com/engine/install/centos/
1.卸载老的dockr

[root@node1 docker]# yum remove docker \
>                   docker-client \
>                   docker-client-latest \
>                   docker-common \
>                   docker-latest \
>                   docker-latest-logrotate \
>                   docker-logrotate \
>                   docker-engine

2.安装docker

[root@node1 docker]# sudo yum install -y yum-utils
[root@node1 docker]#  sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@node1 docker]# sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

3.启动docker

[root@node1 docker]#  sudo systemctl start docker

4.查看版本

[root@node1 docker]# docker -v

5.设置开机自启

[root@node1 docker]# sudo systemctl enable docker 

6.配置镜像加速

1. sudo mkdir -p /etc/docker
2. 
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://gyxyir3g.mirror.aliyuncs.com"]
}
EOF

3.sudo systemctl daemon-reload
4.sudo systemctl restart docker

三、安装mysql

1.下载mysql镜像

[root@node1 ~]# docker pull mysql:5.7

2.运行容器

[root@node1 ~]# docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

3.修改配置文件开启binlog

[root@node1 conf]# vi /mydata/mysql/conf/my.cnf

4.将下面内容配置到my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
log-bin=mysql-bin
binlog-format=ROW
server-id=1

5.重启mysql容器

[root@node1 ~]# docker restart mysql

6.查看binlog开启

show variables like '%log_bin%';

在这里插入图片描述
7.查看binlog日志格式

show variables like '%binlog_format%';

在这里插入图片描述

8.创建student表,后面测试用

CREATE TABLE `student` (
  `id` bigint(20) NOT NULL,
  `name` varchar(128) DEFAULT '',
  `age` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

四、ElasticSearch安装

1.下载elasticSearch镜像

[root@node1 ~]# docker pull elasticsearch:7.4.2

2.下载kibana镜像

[root@node1 ~]#  docker pull kibana:7.4.2

3.设置允许外部任意IP访问

[root@node1 ~]#  echo "http.host: 0.0.0.0">>/docker/elasticsearch/config/elasticsearch.yml

4.创建挂载目录

[root@node1 ~]#  mkdir -p /mydata/elasticsearch/config
[root@node1 ~]#  mkdir -p /mydata/elasticsearch/data

5.设置文件夹权限可读可写可执行

[root@node1 ~]#  chmod -R 777 /mydata/elasticsearch

6.启动

[root@node1 ~]# docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx128m" -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.4.2

访问:192.168.1.101:9200 (主机地址:9200)

7.启动kibana
注意:http://192.168.1.101:9200为elasticsearch的地址,根据自己的主机地址做修改。

[root@node1 data]# docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.1.101:9200 -p 5601:5601 -d kibana:7.4.2

访问:192.168.1.101:5601(主机地址:5601)

8.创建索引后面测试同步数据用

PUT student
{
    "mappings":{
        "properties":{
            "age":{
                "type":"integer"
            },
            "name":{
                "type":"text"
            },
            "id":{
              "type":"long"
            }
        }
    }
}

在这里插入图片描述

五、安装 canal-server

1.下载镜像文件

[root@node1 data]# docker pull canal/canal-server:v1.1.6

2.启动docker

[root@node1 data]# docker run --name canal-server -p 11111:11111 -d canal/canal-server:v1.1.6

3.挂载文件

[root@node1 data]# docker cp canal-server:/home/admin/canal-server/. /mydata/canal-server/
[root@node1 data]# docker stop canal-server
[root@node1 data]# docker rm canal-server

4.再次启动

[root@node1 data]# docker run --name canal-server -p 11111:11111 /
 -v /mydata/canal-server:/home/admin/canal-server -d canal/canal-server:v1.1.6

5.修改配置文件

[root@node1 data]# vim /mydata/canal-server/conf/example/instance.properties

在这里插入图片描述
6.重新启动canal-server

[root@node1 example]# docker restart canal-server 

看到入图片描述
看到successful启动成功

六、安装canal-adapter

说明:截至到写这边博客之前docker hub官网没有提供canal-adapter 1.1.6的镜像文件,所以这里从canal所在git下载canal-adapter1.1.6安装包安装。
下载地址: https://github.com/alibaba/canal/releases

在这里插入图片描述
1.上传服务器后进行解压

[root@node1 canal.adapter]# tar -zxvf canal.adapter-1.1.6.tar.gz

2.修改application.yml配置文件

[root@node1 canal.adapter]# cd /usr/local/canal.adapter/conf/
[root@node1 conf]# vim application.yml 

在这里插入图片描述

4.注掉bootstrap.yml配置文件
说明:bootstrap.yml连接的数据库起到配置中心的作用,如果不注释掉日志会一直报错,但不影响使用,如果你需要该配置中心可以打开该配置连接自己的数据源进行配置。

[root@node1 conf]# vim bootstrap.yml

在这里插入图片描述

5.配置elasticSearch同步数据文件

[root@node1 es7]# vim /usr/local/canal.adapter/conf/es7/student.yml

dataSourceKey: defaultDS # 源数据源的key, 对应配置的 /conf/application.yml 中srcDataSources中的值
destination: example  #  对应配置的 /conf/application.yml中instance或者MQ的topic
groupId: g1 # 对应MQ模式下的groupId, 只会同步对应groupId的数据
esMapping:
  _index: student   # es 的索引名称
  _id: _id  # es 的_id, 如果不配置该项必须配置下面的pk项_id则会由es自动分配
  sql: "SELECT id AS _id ,id AS id ,name AS name,age AS age FROM student"        # sql映射
  etlCondition: "where id>={} and id<={}"   #etl的条件参数
  commitBatch: 3000   # 提交批大小

6.启动

[root@node1 conf]# cd /usr/local/canal.adapter/bin/
[root@node1 bin]# sh startup.sh

在这里插入图片描述
看到succeed启动成功

七、测试同步数据

1.增量同步数据

1)执行sql语句

INSERT INTO student(id,age,name) VALUES(1,18,"张三");

在这里插入图片描述
看到Affected indexes: student 表示同步成功

2)查看ES数据

GET student/_search

在这里插入图片描述
2.批量同步数据

[root@node1 adapter]# curl http://192.168.1.101:8081/etl/es7/student.yml -X POST  -d  "params=1;10"

在这里插入图片描述
看到数据全量导入完成表示同步成功。

八、总结

  1. canal.adapter配置文件application.yml中es的访问地址填http://192.168.1.101:9200,要加上http://,否则会连接不上。有些版本不要加,如果出现连接报错,可以参考一下这个解决方案。
  2. es7下同步数据的配置文件xxx.yml,在确认配置没有问题的情况下启动adapter查看日志报错的情况,建议删除掉这个配置文件,重新建一个新的配置文件,再进行配置。另外配置文件要有被访问的权限。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现MySQL数据实时同步到Elasticsearch可以使用Canal工具。 Canal是阿里巴巴开源的一套基于数据库增量日志解析的数据同步和逆向解析工具,可以实时获取数据库的变更日志,然后将这些变更日志解析成数据并发送到指定的目的地。在实现MySQL数据实时同步到Elasticsearch中,可以使用Canal实现以下步骤: 1. 安装配置Canal:首先,需要下载并安装Canal,并配置Canal的参数,如MySQL的地址、端口、用户名、密码等。 2. 创建Canal实例:根据实际需求,可以创建一个或多个Canal实例来监控和同步MySQL的变更日志。 3. 配置Elasticsearch目的地:配置Canal将变更日志发送到Elasticsearch作为同步的目的地。 4. 启动Canal实例:通过命令行或脚本启动Canal实例,让Canal开始监控MySQL的变更日志。 5. 解析并同步数据:Canal会实时监控MySQL的变更日志,一旦有变更,就会解析并发送到Elasticsearch。在Elasticsearch中,可以根据业务需求进行相应的处理,比如数据转换、数据筛选、数据拆分等,并将处理后的数据存储到Elasticsearch中。 通过以上步骤,就可以实现MySQL数据的实时同步到Elasticsearch中。Canal工具可以很好地解析MySQL的增量日志并将数据发送到Elasticsearch,保证数据的实时性和一致性。同时,Canal还支持分布式部署和高可用性,可以满足大规模数据同步的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值