linux 安装 canal 的详细步骤

Canal 是阿里巴巴开源的 MySQL 数据库 binlog 的增量订阅&消费组件,在 Linux 系统上安装 Canal 的步骤如下:

一、环境准备

  1. JDK 安装

    Canal 依赖 Java 环境,需安装 JDK 8 及以上版本:

    bash 复制代码
    # 以 OpenJDK 为例
    sudo apt update  # Ubuntu/Debian
    sudo apt install openjdk-11-jdk
    
    # 或 CentOS/RHEL
    sudo yum install java-11-openjdk-devel
    
    # 验证安装
    java -version
  2. 配置 MySQL

    修改 MySQL 配置文件(通常是 /etc/mysql/my.cnf/etc/my.cnf):

    ini 复制代码
    [mysqld]
    log-bin=mysql-bin       # 开启 binlog
    binlog-format=ROW       # binlog 格式,必须为 ROW
    server-id=1             # MySQL 实例唯一 ID

    重启 MySQL 并创建 Canal 专用账号:

    sql 复制代码
    CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
    FLUSH PRIVILEGES;

二、下载并安装 Canal

  1. 下载 Canal 发行包

    Canal GitHub 仓库 下载最新稳定版(例如 canal.deployer-1.1.5.tar.gz):

    bash 复制代码
    wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz
    tar -zxvf canal.deployer-1.1.5.tar.gz -C /opt/canal/
  2. 配置 Canal 实例

    进入 conf 目录,复制示例配置并编辑:

    bash 复制代码
    cd /opt/canal/conf/
    cp example instance_name  # instance_name 为自定义实例名,如 mysql_test
    cd instance_name
    vi instance.properties

    修改以下配置项:

    properties 复制代码
    canal.instance.master.address=127.0.0.1:3306  # MySQL 地址和端口
    canal.instance.dbUsername=canal                # MySQL 用户名
    canal.instance.dbPassword=canal                # MySQL 密码
    canal.instance.defaultDatabaseName=            # 监控的数据库,留空则监控所有
    canal.instance.connectionCharset=UTF-8        # 字符集
    canal.instance.filter.regex=.*\\..*            # 表过滤规则,例如 test\\..* 表示 test 库下的所有表

三、启动 Canal

  1. 启动脚本

    使用内置脚本启动 Canal 服务:

    bash 复制代码
    cd /opt/canal/bin
    ./startup.sh [instance_name]  # 可选实例名,不指定则启动所有实例
  2. 查看日志

    检查服务是否正常启动:

    bash 复制代码
    # 查看主服务日志
    cat /opt/canal/logs/canal/canal.log
    
    # 查看实例日志
    cat /opt/canal/logs/instance_name/instance.log

    若看到 start successful 则表示启动成功。

四、验证安装

  1. 客户端测试

    使用 Canal 自带的客户端工具测试连接:

    bash 复制代码
    cd /opt/canal/bin
    ./canal_client.sh

    在客户端中输入 show info 查看状态。

  2. 编程验证

    通过代码连接 Canal Server,消费 binlog 数据(以 Java 为例):

    java 复制代码
    // 添加依赖(Maven)
    <dependency>
        <groupId>com.alibaba.otter</groupId>
        <artifactId>canal.client</artifactId>
        <version>1.1.5</version>
    </dependency>
    
    // 代码示例
    CanalConnector connector = CanalConnectors.newSingleConnector(
        new InetSocketAddress("127.0.0.1", 11111),
        "instance_name", "", "");
    connector.connect();
    connector.subscribe(".*\\..*");
    
    while (true) {
        Message message = connector.get(100);
        List<CanalEntry.Entry> entries = message.getEntries();
        // 处理 entries...
    }

五、停止服务

bash 复制代码
cd /opt/canal/bin
./stop.sh [instance_name]  # 可选实例名,不指定则停止所有

常见问题

  1. 连接失败

    检查 MySQL 配置、用户权限及网络连通性。

  2. 权限不足

    确保 Canal 账号拥有 REPLICATION SLAVEREPLICATION CLIENT 权限。

  3. 内存溢出

    编辑 bin/startup.sh,调整 JVM 内存参数(如 JAVA_OPTS="-Xms256m -Xmx512m")。

通过以上步骤,你可以在 Linux 系统上成功安装并配置 Canal,实现 MySQL binlog 的增量订阅与消费。

相关推荐
NPE~16 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
神梦流16 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器
凡人叶枫16 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
wdfk_prog17 小时前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
xuhe217 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
Lsir10110_17 小时前
【Linux】进程信号(下半)
linux·运维·服务器
skywalk816317 小时前
unbound dns解析出现问题,寻求解决之道
运维·服务器·dns·unbound
酉鬼女又兒17 小时前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面17 小时前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
skywalk816317 小时前
走近科学:unbound dns域名服务器自己本地解析出现问题,寻求解决之道
运维·服务器·dns·unbound