centos7-aliyunrds-canal

一、准备

  1. 针对阿里云RDS for MySQL , 默认打开了 binlog , 并且reader账号默认具有 binlog dump 权限 , 不需要任何权限或者 binlog 设置,可以直接使用

  2. 确保创建reader用户并授权以下相关权限

    CREATE USER canal IDENTIFIED BY '密码';
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
    FLUSH PRIVILEGES;
  3. 获取阿里云rds的accesskey和access secret

    • 登录主账号
    • 进入AccessKey管理
    • 选择RAM子账号访问控制
    • 创建canal子账户
    • 对canal子账户设置权限,加入AliyunRDSReadOnlyAccess权限和AliyunOSSReadOnlyAccess权限
  4. 确保安装了jdk

    # yum install java-11-openjdk
  5. 安装zookeeper

    • Release页面下载stable版本
    • 解压压缩文件
    • 重命名conf文件,将conf/zoo_sample.cfg重命名为conf/zoo.cfg
    • 创建一个zookeeper数据目录,例如: /var/lib/zookeeper
    • 将配置文件conf/zoo.cfg中的配置修改为如下:
      dataDir=/var/lib/zookeeper
    • 启动zookeeper
      # sh bin/zkServer.sh start

二、启动canal server

  1. 访问release页面,下载最新的canal.deployer的release包

  2. 配置conf/example/instance.properties文件

    # position info
    canal.instance.master.address=阿里云rds服务器的内网地址:3306
    ...
    # rds oss binlog
    canal.instance.rds.accesskey=RAM子账号的access key
    canal.instance.rds.secretkey=RAM子账号的secret key
    canal.instance.rds.instanceId=阿里云RDS的instance id
    
    # table meta tsdb info
    canal.instance.tsdb.dbUsername=reader
    canal.instance.tsdb.dbPassword=reader账号的密码
    
    # username/password
    canal.instance.dbUsername=reader
    canal.instance.dbPassword=reader账号的密码
    # table regex
    canal.instance.filter.regex=.\..
    # table black regex
    canal.instance.filter.black.regex=
  3. 配置conf/canal.properties

    • 在Mysql中获取客户端使用的密码SELECT PASSWORD('密码');
      # canal instance user/passwd
      canal.user = canal
      canal.passwd = 使用mysql中的password函数生成的密码

三、FAQ

1. 为什么canal启动了后获取不到binlog日志?

- 首先检查logs/canal/canal.log中日志是否正常
- 然后检查logs/example/example.log中日志是否正常

e,g: 例如在logs/example/example.log中有如下日志,提示binglog时间解析出错

[destination = example , address = rm*.aliyuncs.com/*.*.*.*:3306 , EventParser] ERROR com.alibaba.otter.canal.common.alarm.LogAlarmHandler - destination:example[com.alibaba.otter.canal.parse.exception.CanalParseException: java.io.IOException: ErrorPacket [errorNumber=1146, fieldCount=-1, message=Table '*.* TABLE' doesn't exist, sqlState=42S02, sqlStateMarker=#]
 with command: show create table `*`.`*`;show create table `*`.`* TABLE`;show create table `*`.`*`;show create table `*`.`* TABLE`;
Caused by: java.io.IOException: ErrorPacket [errorNumber=1146, fieldCount=-1, message=Table 'hdmall_asynctask.BASE TABLE' doesn't exist, sqlState=42S02, sqlStateMarker=#]
 with command: show create table `*`.`*`;show create table `*`.`* TABLE`;show create table `*`.`*`;show create table `*`.`* TABLE`;
        at com.alibaba.otter.canal.parse.driver.mysql.MysqlQueryExecutor.queryMulti(MysqlQueryExecutor.java:109)
        at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.queryMulti(MysqlConnection.java:111)
        at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.dumpTableMeta(DatabaseTableMeta.java:233)
        at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.rollback(DatabaseTableMeta.java:174)
        at com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.processTableMeta(AbstractMysqlEventParser.java:142)
        at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$1.run(AbstractEventParser.java:197)
        at java.base/java.lang.Thread.run(Thread.java:829)
]

解决方案:

- 停止canal server服务sh bin/stop.sh
- 删除掉conf/example/meta.dat文件
- 重新启动canal server服务sh bin/start.sh

2. 为什么注册的ip是不正确的ip?

需要修改register_ip为正确的值

参考

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇