首页 > 数据库 >使用canal同步mysql数据到elasticsearch

使用canal同步mysql数据到elasticsearch

时间:2023-05-24 18:24:10浏览次数:70  
标签:canal deployer instance elasticsearch user conf mysql yml

官方去下载canal包

https://github.com/alibaba/canal/releases/tag/canal-1.1.6

分为deployer、admin、adapter三个模块。deployer是数据库数据同步服务端。adapter是适配同步到不同终端,可以是es,hbase,redis其它数据库等。admin是一个配置管理中心,但是吧又没有配置adapter的界面,adapter还要连admin对应的配置库。每个模块包下都有

bin目录存放启停脚本,conf配置文件,logs日志文件。

deployer

conf/canal.properties文件,这里只吧canal_local.properties里的配置项对应更新进来。实例就使用默认的example,

修改example实例配置文件conf/example/instance.properties

主要修改主库连接信息,根据实际来。

canal.instance.master.address=127.0.0.1:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8

然后执行 bin/startup.sh 启动deployer。

其它数据库准备活动参考写的这篇文章吧:使用canal同步mysql数据

admin

conf下有一个canal_manager.sql数据库初始化文件,执行创建对应的canal_manager库。

是一个springboot工程,application.yml修改数据库连接配置

spring.datasource:
  address: 127.0.0.1:3306
  #上面刚创建的数据库
  database: canal_manager
  username: canal
  password: canal

浏览器访问http://localhost:8089/ 默认账号 admin/123456.

界面上有server管理和instance管理。server对应的deployer服务,instance对应的example这种配置。可以在线配置,会自动刷新到deployer配置中。如果这里看不到server,可能需要重启下deployer。

adapter

主要是deployer的消费端适配,这里以同步到es为例

conf/bootstrap.yml配置文件,修改为连接admin对应配置库canal_manager的连接信息。

conf/application.yml配置,只列修改的配置,其它的都用默认值

canal.conf:
  consumerProperties:
    # deployer 服务地址
    canal.tcp.server.host: 127.0.0.1:11111

  srcDataSources:
    defaultDS:
      url: jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true
      username: root
      password: root
  canalAdapters:
  - instance: test # canal instance Name or mq topic name
    groups:
    - groupId: g1
      outerAdapters:
      - name: logger
      #es adapter 连接信息
      #name 改成es7,会读取 conf/es7/下的es配置文件
      - name: es7
        #es rest地址
        hosts: http://127.0.0.1:9200 # 127.0.0.1:9200 for rest mode
        properties:
          mode: rest
          #账号密码
          security.auth: elastic:888888 
          #集群名称
          cluster.name: my-application

然后修改conf/es7/下的配置文件。默认有biz_order.yml、customer.yml、mytest_user.yml三个样例配置文件。只保留一个mytest_user.yml文件。

然后数据库创建一个用户表用来作为同步数据验证。

创建表

CREATE TABLE `sys_user` (
	`id` INT(10) NOT NULL AUTO_INCREMENT,
	`code` VARCHAR(50) NOT NULL,
	`name` VARCHAR(50) NOT NULL,
	PRIMARY KEY (`id`) USING BTREE
)

mytest_user.yml对应配置

#application.yml中配置的srcDataSources
dataSourceKey: defaultDS
destination: example
groupId: g1
esMapping:
  #es中index名称
  _index: mytest_user
  #索引id使用的列
  _id: _id
#  upsert: true
#  pk: id
 #索引对应的数据
  sql: "select a.id as _id, a.name, a.code from sys_user a"

这里也支持比较复杂的关联查询取数。对应的mytest_user索引要预先在es中创建好。

索引创建,使用kibana的dev tool界面创建

PUT mytest_user
{
  "mappings": {
      "properties": {
          "name": {
              "type": "text"
          },
          "code": {
              "type": "text"
          }
      }
  }
}

bin/start.sh 启动adapter。

sys_user表插入数据验证是否同步成功。

可能遇到的问题

1、jdk版本问题。

官方说的1.1.6版本可以使用jdk1.8。然而在启动admin和deployer的时候会遇到一些问题。例如NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer异常,所以最好jdk升级到11.

2、启动参数

默认配置:-Xms2g -Xmx3g Xss256k。堆内存根据自己配置实际来。Xss栈内存我这里是起不来的,

会报The stack size specified is too small, Specify at least 328k异常。调大。

3、mysql8连接问题

发生Caused by: java.io.IOException: caching_sha2_password Auth failed异常,连接不上数据库。

修改slave用户canal密码认证方式。mysql8默认密码认证方式是caching_sha2_password ,修改成mysql_native_password。

ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal';
FLUSH PRIVILEGES;

root用户执行该语句可能会报1227错误需要SYSTEM_USER 权限。root用户没有,需要先新增root权限

grant system_user on *.* to 'root';
FLUSH PRIVILEGES;

查看用户认证方式

SELECT user,authentication_string,plugin,host FROM mysql.user;

坑还是挺多的,算是跑起来了。

标签:canal,deployer,instance,elasticsearch,user,conf,mysql,yml
From: https://www.cnblogs.com/bird2048/p/17429166.html

相关文章

  • PostMan连接Mysql数据库及相关操作
    前置:有nodejs环境1,安装xmysqlnpminstall-gxmysql 2,连接数据库xmysql-h主机名或者IP地址-u数据库账号-p密码-d数据库名  如果能看到数据库信息,生成的API的数量等信息,证明连接成功。 3,数据库操作连接成功后,可以直接访问API'sbaseURL地址,可以得到......
  • 01_MySQL基础架构
    01_MySQL基础架构MySQL45讲Note:课程专栏名称:《MySQL实战45讲》课程笔记参考:MYSQL45讲01_基础架构:一条SQL查询语句是如何执行的?一条SQL查询是如何执行的先看一下下面这个图​​我们首先理解一下Mysql的基础架构,理解如果执行一条简单的查询语句,Mysql进行了哪些操作。......
  • 【MySQL】2-深入理解MySQL体系认识及SQL的执行
    文章目录MySQL体系认识及SQL的执行MySQL体系结构clientconnectorsConnectionPoolSQLInterfaceParserOptimizer文件系统Cache工作原理缓存配置限制条件各存储引擎CSV引擎【表格存储】Archive存储引擎【压缩协议】Memory存储引擎【存储内存中、热点数据】Myisam【8.0淡出了历史舞......
  • mysql、sqlx
    1.导包goget-ugithub.com/go-sql-driver/mysqlimport_"github.com/go-sql-driver/mysql"_表示只执行包中init函数,mysql包会在init函数中注册自己。2.连接数据库利用基本库database/sql连接数据库1dsn:="root:123456@tcp(127.0.0.1:3306)/test_db"2db,err:=s......
  • MySQL8.0清空binlog
    环境centos7.9mysql Ver8.0.32登录MySQL,查看binlog日志#查看binlog日志开启状态,log_bin值为ON表示开启状态mysql>showvariableslike'log_bin';+---------------+-------+|Variable_name|Value|+---------------+-------+|log_bin|ON|+---------......
  • MySQL8.0配置my.cnf
    环境centos7.9因为是源码安装的MySQL8.0.32,查了一下MySQL8.0之后源码中不包含my.cnf文件和my-default.cnf文件了。手动创建一个my.cnf,放到默认目录/etc下,以后修改配置可以从my.cnf文件中修改,重启生效,相当于永久生效。文件内容:暂时先配这些,后期再扩展[client]port=3306soc......
  • Linux下Elasticsearch集群搭建
    在每台服务器上安装ES,此处略过,如需要请查看过往文章。集群的搭建主要是修改每个节点的配置文件(elasticsearch.yml)#集群名称cluster.name:veolia-es-cluster#节点名称node.name:es02#是否作为主节点(每个节点都配置true)node.master:truenode.data:true#IPnetwor......
  • MySQL保证主备一致,如何解决循环复制?
    备库只读,是如何和主库同步数据的?你可能会问,我把备库设置成只读了,还怎么跟主库保持同步更新呢?这个问题,你不用担心。因为readonly设置对超级(super)权限用户是无效的,而用于同步更新的线程,就拥有超级权限。主备同步的详细流程?可以看到:主库接收到客户端的更新请求后,执行内部......
  • java将wkt面数据转geojson和elasticsearch的shape数据
    wkt面数据转geojsonimportcom.alibaba.fastjson.JSONException;importcom.alibaba.fastjson.JSONObject;importorg.locationtech.jts.geom.Coordinate;importorg.locationtech.jts.geom.Geometry;importorg.locationtech.jts.io.ParseException;importorg.location......
  • 【MySQL】MySQL 事务以及隔离级别和MVCC
    1  前言这节我们来看看MySQL中的事务,比如我们生活中的转账,要保证转账业务里的所有数据库的操作是不可分割的,要么全部执行成功,要么全部失败,不允许出现中间状态的数据。数据库中的「事务(Transaction)」就能达到这样的效果。我们在转账操作前先开启事务,等所有数据库操作执行完成......