本系列的三篇文章均是基于github上的canal文档实践而来。其文档可读性还是比较好的,如果您的时间充裕,有充足的时间成本,笔者强烈建议您去阅读官方文档。如果您想要快速实现mysql数据同步,本系列文章应该能帮助到您。
其github地址如下: github.com/alibaba/can…
本系列的下载均在github,如果您不能科学上网,可私信获取压缩包。
canal-deployer部署导航
linux环境canal实现mysql两库的数据同步(二)canal-adapter的部署与启动
canal-admin部署导航
1 缘起与目的
最近遇到一个需求,需要将mysql中的某几个表推送到另一个mysql中,由另一个应用完成对这些数据的读取。这个需求有以下要求:
- 稳定。不能频繁出现同步不成功的情况。
- 部署快速。这个需求需要快速上线,需要学习成本低的工具。
- 数据不能丢失。不能出现丢数据的情况。
针对以上要求,我们的工具选型锁定了两款,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';
如果不是如上配置,需要修改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
5 修改配置文件
如果不是新部署的mysql和数据库,需要查一下mysql主库最新的binlog文件位置名称和mysql主库链接时起始的binlog偏移量。
show master status;
修改如下配置文件 /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_.*
这里贴上一段官方文档的配置说明。
6 启动并查看日志
启动deployer
cd /usr/local/sdyy/pm/canal
# 启动
sh bin/startup.sh
# 查看 server 日志
vi logs/canal/canal.log
# 查看 instance 的日志
vi logs/example/example.log
启动
查看 server 日志
查看 instance 的日志