-
Notifications
You must be signed in to change notification settings - Fork 7.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
canal支持aliyun rds的binlog订阅 #727
Comments
代码提交:ea6391d |
具体aliyun rds使用文档:https://github.com/alibaba/canal/wiki/aliyun-RDS-QuickStart |
我用的1.1.1版本的,还有不少bug |
@hustwolf 有问题需要反馈 |
现在需求要监控RDS的biglog日志,现在可能会遇到两个问题,可以解答一下吗 第一个问题是 rds实例切换还能监控biglog的日志吗 第二个问题是 poll的biglog日志跟rds上的一样吗 期待你的回复 |
|
启动canal时抛了异常:Caused by: java.io.IOException: connect rm-**.mysql.rds.aliyuncs.com/139.224..:3306 failure,Caused by: java.net.SocketTimeoutException: connect timed out,我是在instance配置文件中指定master.address为rds的域名,能否提供一下帮助?多谢! |
RDS切换时发现对应的数据会重复或者丢失,怎么可以避免这种情况 |
RDS切换数据丢失应该不至于啊,能描述一下你分析到的具体丢失原因? |
主备自动切换,需要怎么配置? |
多看wiki |
您好
我最近在使用canal-1.1.4版本 我在添加集群的时候 遇到了一个bug Column 'modified_time' cannot be null如下图
最后发现是JPA 将CanalCluster类中的modifiedTime字段自动设置为空了
现在的问题是无法添加集群
在 2019-08-29 10:43:49,"agapple" <[email protected]> 写道:
多看wiki
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.
|
@agapple 你好,我想问下,我这边rds是5.6的,canal版本是1.1.4的,一直报错SHOW command denied to user for table 'slave_master_info',一定需要root账号赋权限吗,然而阿里云rds的root账号又不给的,这怎么办呢 |
通过canal的同步之后,主数据库和被数据库的binlog日志可以保持事务的一致性吗?也就是说备份之后,原事务是否会被拆散? |
通过canal的同步之后,主数据库和备份数据库的binlog日志可以保持事务的一致性吗?也就是说备份之后,原事务是否会被拆散? |
我用Canal同步阿里云RDS MySQL数据库数据,周五的时候停止了服务,到周一的时候再开服务,控制台报错 |
我用canal 同步RDS MySQL版数据库中的数据时,启动canal,一直报这个错误,怎么解决呢? |
使用过程中发现几个问题: public class PlainCanalInstanceGenerator implements CanalInstanceGenerator {
private static final Logger logger = LoggerFactory.getLogger(SpringCanalInstanceGenerator.class);
private String springXml;
private PlainCanalConfigClient canalConfigClient;
private String defaultName = "instance";
private BeanFactory beanFactory;
private Properties canalConfig;
public PlainCanalInstanceGenerator(Properties canalConfig){
this.canalConfig = canalConfig;
}
public CanalInstance generate(String destination) {
synchronized (CanalInstanceGenerator.class) {
try {
//这里是从admin上拉到的instance配置
PlainCanal canal = canalConfigClient.findInstance(destination, null);
if (canal == null) {
throw new CanalException("instance : " + destination + " config is not found");
}
Properties properties = canal.getProperties();
// merge local
properties.putAll(canalConfig);// 这里是原本的写法
// canalConfig.putAll(properties);//应该改成这样
// 设置动态properties,替换掉本地properties
com.alibaba.otter.canal.instance.spring.support.PropertyPlaceholderConfigurer.propertiesLocal.set(properties);
// 设置当前正在加载的通道,加载spring查找文件时会用到该变量
System.setProperty("canal.instance.destination", destination);
this.beanFactory = getBeanFactory(springXml);
String beanName = destination;
Å if (!beanFactory.containsBean(beanName)) {
beanName = defaultName;
}
return (CanalInstance) beanFactory.getBean(beanName);
} catch (Throwable e) {
logger.error("generator instance failed.", e);
throw new CanalException(e);
} finally {
System.setProperty("canal.instance.destination", "");
}
}
} 2.在instance中配置canal.instance.rds.accesskey其实也是不对的,代码里面真正构建spring bean的时候使用的canal.aliyun.accessKey。 // 兼容1.1.0版本的ak/sk参数名
String accesskey = getProperty(properties, "canal.instance.rds.accesskey");
String secretkey = getProperty(properties, "canal.instance.rds.secretkey");
if (StringUtils.isNotEmpty(accesskey)) {
System.setProperty(CanalConstants.CANAL_ALIYUN_ACCESSKEY, accesskey);
}
if (StringUtils.isNotEmpty(secretkey)) {
System.setProperty(CanalConstants.CANAL_ALIYUN_SECRETKEY, secretkey);
} 3.源码中给的xml文件是有问题的,base-instance.xml中的canal.aliyun.accesskey的"accesskey"小写了,应该改成大写accessKey
4.要在1.1.4版本正确使用,做如下操作: |
不要暂停太久,实例上的binlog文件会定期刷掉,上传oss的。 |
我有些疑惑:通过阅读该issue和文档:https://github.com/alibaba/canal/wiki/aliyun-RDS-QuickStart 后,现在1.1.4稳定版本已经解决了阿里云rds自动主从切换导致binlog位点变更同步失败的问题吗?另外rds默认18小时清理,配置上传oss后,有什么作用? |
已经解决了主从切换的问题,通过时间戳定位。 |
此逻辑是canal自动完成吗?我刚接手公司这个项目,有人反馈rds做了主从切换导致同步失败了。我还在梳理中,就来官方issue里问下canal是否已经自己就具备该能力。您说的时间戳定位,是否还需要人工介入呢?当主从切换时,Canal会自动根据该时间戳去从原本订阅主切换到订阅从来保证同步的正常进行吗? |
嗯,我们使用的1.1.4版本。主从切换后会有一会失败,大概一分钟左右自动恢复,不需要人工介入。 |
好的,我明天做下验证,感谢! |
请教下,我查了下我们目前遇到的问题,并不是rds主从切换导致的问题。而是表结构变更,新增了一个字段,然后canal写入meta_history时出错了。一直提示这样一个错误:“Cause: org.h2.jdbc.JdbcSQLException: Table "META_HISTORY" not found; SQL statement:”。想请教下这是因为什么? |
请问你是如何解决的?我也遇到了同样的问题 |
大概是tsdb的问题吧。 |
在canal所在服务器上,尝试一下telnet host(你的数据库域名) 336,确认下网络是通的。 |
RDS版本: 5.6 Canel: 1.1.4 遇到这个问题,请问该怎么解决? 2021-03-05 12:29:49.791 [pool-8-thread-1] ERROR c.a.o.c.adapter.launcher.loader.CanalAdapterKafkaWorker - java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Target column: #alibaba_rds_row_id# not matched |
目前个人觉得可用的解决方式是设置canal_adapter配置文件conf/application.yml的retries为-1,然后发现原表执行DDL变更后,先停止canal_adapter,然后手动修改目标表结构后,再次启动canal_adapter,canal_adapter会把之前写入失败的数据重新写入 |
canal_adapter的配置文件conf/rdb/mytest_user.yml配置了etlCondition: "where uid=1"不生效,请问有解决方案吗? |
请问下这个问题现在官方有fixbug吗,我这边目前canal-admin 配置ak 失败 |
还是有报错信息,也没解析成功 |
最近,我公司需要通过阿里云Rds的binlog历史文件进行消息回溯(我公司使用的是阿里云全家桶),我下载了最新的canal-1.1.7正式版的版本后,尝试了很多次都没办法正常使用该功能,在此之前也尝试过canal-1.1.0的版本都是无法正常跑通。于是自己抽时间改造了一个我公司可以使用的版本,该版本是从本项目的canal-1.1.7-hotfix-1分支fork出来的: 我改造后的canal.parse-1.1.7.jar版本已在我公司的生产环境运行测试,一切正常。以下为改动、优化内容概述: 简单的使用文档: https://github.com/HelloLyfing/canal/wiki/canal.parse%E2%80%901.1.7.jar 另外官方的使用文档也可以适当更新,比如: canal.aliyun.accessKey的配置貌似不可以(注意key的大小写填错了不行),应该是: |
大佬 ,替换了 canal.parse-1.1.7.jar 文件后,重启canal ,设置位点方式从oss拉取 ,也没有成功 新日志文件报下面这个错误 canal.aliyun.accesskey / canal.aliyun.secretkey 也设置了 ,但貌似没有去 oss 拉取 ,oss 上是有这个文件的 |
@callmedba
以下为zk存储的消费位点模板
另外,在调试阶段可以考虑修改conf/logback.xml中的日志等级为INFO,可以看到更多日志信息 |
aliyun是一家伟大的公司,也是目前国内云市场占比最高的,考虑前面有太多的小伙伴和我反馈过期望能更全面的支持RDS binlog的订阅。aliyun RDS主要满足用户对于MySQL的简单方便使用,针对用户业务发展迅速,对于未来存储/计算扩展性有预期的也会使用aliyun DRDS( Distributed Relational Database Service),一个基于MySQL sharding的分布式数据库解决方案,因为存储本身是MySQL也可以比较方便的基于canal进行数据订阅。
首先明确一下针对这类云MySQL的binlog订阅,通常会面临的几个问题:
The text was updated successfully, but these errors were encountered: