linux环境canal实现mysql两库的数据同步(一)canal-deployer的部署与启动

907 阅读3分钟

本系列的三篇文章均是基于github上的canal文档实践而来。其文档可读性还是比较好的,如果您的时间充裕,有充足的时间成本,笔者强烈建议您去阅读官方文档。如果您想要快速实现mysql数据同步,本系列文章应该能帮助到您。

其github地址如下: github.com/alibaba/can…

本系列的下载均在github,如果您不能科学上网,可私信获取压缩包。

canal-deployer部署导航

linux环境canal实现mysql两库的数据同步(二)canal-adapter的部署与启动

canal-admin部署导航

linux环境canal实现mysql两库的数据同步(三)canal-admin的部署与启动

1 缘起与目的

最近遇到一个需求,需要将mysql中的某几个表推送到另一个mysql中,由另一个应用完成对这些数据的读取。这个需求有以下要求:

  1. 稳定。不能频繁出现同步不成功的情况。
  2. 部署快速。这个需求需要快速上线,需要学习成本低的工具。
  3. 数据不能丢失。不能出现丢数据的情况。

针对以上要求,我们的工具选型锁定了两款,kettle与canal。由于canal能做到数据实时同步,且文档比较可读性高,学习成本低,社区活跃度高,所以最终我们工具选型确定为canal。

2 系列介绍

canal是基于mysql数据库增量日志解析工具,提供增量数据订阅&消费。本系列将部署三个服务。分别为:

  • canal-deployer。对mysql binlog进行监听的服务。
  • canal-adapter。客户端数据落地的适配及启动服务,可用于同步数据。
  • canal-admin。提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作。(本模块非必须)

3 检查源数据库配置

需要检查一下源数据库binlog是否开启,binlog-format模式是否为ROW。

SHOW VARIABLES 
WHERE
    variable_name LIKE 'log_bin' 
    OR variable_name LIKE 'binlog_format';

image.png

如果不是如上配置,需要修改mysql配置,在[mysqld]加上如下配置。

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

授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限。如果已有账户可直接 grant。如果是root可直接跳过这一步。

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

4 下载与解压

我们以最新版本1.1.6为例。 下载地址如下: github.com/alibaba/can…

下载完成后上传至服务器并解压。

tar zxvf canal.deployer-1.1.6.tar.gz

上传解压后.png

5 修改配置文件

如果不是新部署的mysql和数据库,需要查一下mysql主库最新的binlog文件位置名称和mysql主库链接时起始的binlog偏移量。

show master status;

image.png

修改如下配置文件 /usr/local/sdyy/pm/canal/conf/example/instance.properties

canal.instance.gtidon=false

# 需要改成自己的数据库信息
canal.instance.master.address=XX.XX.XX.XX:3306
# mysql主库的最新binlog文件位置名称
canal.instance.master.journal.name=mysql-bin.000072
# mysql主库链接时起始的binlog偏移量
canal.instance.master.position=673943695
canal.instance.master.timestamp=
canal.instance.master.gtid=

# 需要改成自己的数据库信息
canal.instance.dbUsername=root
canal.instance.dbPassword=123456
canal.instance.connectionCharset = UTF-8
canal.instance.enableDruid=false

# table regex .*\\..*表示监听所有表 也可以写具体的表名,用,隔开
canal.instance.filter.regex=pm_dev2.0.pm_project_info,pm_dev2.0.pm_requirement_info
# mysql 数据解析表的黑名单,多个表用,隔开
canal.instance.filter.black.regex=mysql\\.slave_.*

这里贴上一段官方文档的配置说明。

image.png

6 启动并查看日志

启动deployer

cd /usr/local/sdyy/pm/canal
# 启动
sh bin/startup.sh
# 查看 server 日志
vi logs/canal/canal.log
# 查看 instance 的日志
vi logs/example/example.log

启动

4-启动.png

查看 server 日志

4-查看 server 日志.png

查看 instance 的日志

4-3-查看example日志.png