CloudCanal社区版默认延迟由于源端实例没有任何变更而显示延迟问题,按惯性思维,容易误解为数据库同步异常有延迟,延迟实则表示mysql源库binlog从上次未有变化到现在的时间。
问题描述
数据同步正常,但在任务管理中,同步正常情况下,会显示有延迟。
按以往惯性思维,容易理解为数据同步有延迟,所显示的延迟并非实际延迟,数据同步正常情况下,该延迟表示mysql源库binlog从上次未有变化到现在的时间。
最常见的一种情况就是源端实例没有任何变更,这种情况下延迟会一直增长,因为cloudcanal没有收到任何变更。
解决方案
源端准备一张心跳表,定时(Java、python或crontab等方式)的对心跳表做一些更新,这样既可解决延迟由于实例没有任何变更导致的延迟问题。
如果不是这种情况导致延迟,一般是由于任务异常导致
- 手动增加心跳表的方式
在源端实例创建任意数据库,如test库,也可使用以前的数据库;
在源端实例上创建任意表,如test表。
此次不创建数据库,采用在原有prod数据库中创建心跳表:cloudcanal_heartbeat
进入prod数据库
mysql> use prod;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed;
在prod数据库下创建心跳表cloudcanal_heartbeat
mysql> create table cloudcanal_heartbeat
-> (
-> `id` bigint(20) NOT NULL AUTO_INCREMENT,
-> `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-> `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-> PRIMARY KEY (`id`)
-> );
心跳表中插入数据
mysql> insert into cloudcanal_heartbeat(id, gmt_create, gmt_modified) VALUES (1,now(),now());
Query OK, 1 row affected (0.01 sec)
查看插入的心跳表数据
mysql> select * from cloudcanal_heartbeat;
+----+---------------------+---------------------+
| id | gmt_create | gmt_modified |
+----+---------------------+---------------------+
| 1 | 2022-03-04 04:21:49 | 2022-03-04 04:21:49 |
+----+---------------------+---------------------+
1 row in set (0.00 sec)
- 设置crontab定时任务
每分钟更新心跳表字段,确保源端mysql binlog有变化
* * * * * mysql -uroot -pYour_Password -D prod -e "update cloudcanal_heartbeat set gmt_modified=now() where id=1;"
也可以写入脚本中,crontab直接调用脚本
#!/bin/bash
user=root
pass=Your_Password
db=prod
tablename=cloudecan_heartbeat
mysql -u$user -p$pass -D $db -e "update cloudcanal_heartbeat set gmt_modified=now() where id=1;"
- 查询gmt_modified是否更新-已经更新
mysql> select * from cloudcanal_heartbeat;
+----+---------------------+---------------------+
| id | gmt_create | gmt_modified |
+----+---------------------+---------------------+
| 1 | 2022-03-04 04:21:49 | 2022-03-04 20:36:01 |
+----+---------------------+---------------------+
1 row in set (0.00 sec)
- 查看任务延迟是否正常
在CloudCanal中,点开任务列表,查看延迟同步正常。