ElasticSearchに増分同期のMySQLのデータベース情報

  

 

  1.はじめに

  はじめに1.1運河

  運河は、MySQLベースのバイナリログパフォーマンスデータ同期システムです。広く信頼性の高い低遅延データパイプ増分を提供するために、(https://www.taobao.com含む)運河アリババで使用される、githubの住所:HTTPS://github.com/alibaba/canal

  運河Serverは、MySQLのバイナリログを解析し、データの変更をサブスクライブし、変更が運河クライアントがデータベースやApacheのカフカなど、任意の場所にブロードキャスト実装することができます。

  それは次の機能があります。

  すべてのサポートされるプラットフォーム。

  プロメテウスきめ細かな監視システムを搭載しサポート。

  分析支援とGTIDにより例えば、異なる方法でのMySQLのbinlogに加入。

  高性能、リアルタイムのデータ同期をサポートしています。(パフォーマンスを参照してください)

  運河サーバとApache ZooKeeperのでサポートされている運河クライアントサポートHA /スケーラビリティ、

  ドッカーサポート。短所:

  全額の更新をサポートしていないだけ増分更新をサポートしています。

  フルウィキアドレスします。https://github.com/alibaba/canal/wiki

  どのように動作する1.2

  原理は簡単です:

  スレーブの管アナログMySQLの対話プロトコルは、スレーブは、MySQLを装っ、及び転送プロトコルマスタMySQLサーバに送信されます。

  MySQLのマスターダンプ要求が受信され、バイナリログスレーブ(すなわち管)をプッシュし始めます。

  示されるように管バイナリログオブジェクトは、それらのデータ・タイプ(ローバイトストリーム)に解決されます。

  

 

  1.3同期ES

  運河アダプター:必要性はアダプタを使用するときにデータを同期するためのエス。最新バージョン1.1.3、ダウンロードアドレス:httpsを://github.com/alibaba/canal/releases。

  一見現在サポートされているバージョン6.xをES、7.xのバージョンはサポートされていません!

  2.準備

  2.1 ESおよびJDK

  インストールESを参照することができます。https://www.dalaoyang.cn/article/78

  リファレンスを搭載してもよいJDKます。https://www.dalaoyang.cn/article/16

  2.2インストール運河サーバ

  canal.deployer-1.1.3.tar.gzをダウンロード

  

 

  ファイルを解凍します

  

 

  フォルダにファイルを解凍します

  

 

  次へのconf /例/ instance.propertiesファイル、いくつかの主要な注意を変更します。

  canal.instance.master.address:アドレスデータベース、たとえば127.0.0.1:3306

  canal.instance.dbUsername:データベース・ユーザー

  canal.instance.dbPassword:データベースのパスワードの完全な内容は以下の通り:

  

 

  

 

  バックcanal.deployer-1.1.3ディレクトリ、運河を起動します。

  SHビン/ startup.sh

  ログの表示:

  私たちのログ/運河/ canal.log

  特定のインスタンスのログを表示します。

  viのログ/例/ example.log

  コマンドを終了します

  SHビン/ stop.sh

  2.3インストール運河アダプタ

  canal.adapter-1.1.3.tar.gzをダウンロード

  wgetのhttps://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.adapter-1.1.3.tar.gz

  減圧

  canal.adapter-1.1.3.tar.gz -zxvfタール

  フォルダにファイルを解凍します

  CDのcanal.adapter-1.1.3

  それはYMLファイルであるため、研究会/ application.ymlファイルは、以下の主な注意を修正し、ここで説明する私のプロパティの名前に注意してください。

  server.port:運河アダプタのポート番号

  canal.conf.canalServerHost:運河・サーバーとIPアドレス

  canal.conf.srcDataSources.defaultDS.url:数据库地址

  canal.conf.srcDataSources.defaultDS.username:数据库用户名

  canal.conf.srcDataSources.defaultDS.password:数据库密码

  canal.conf.canalAdapters.groups.outerAdapters.hosts:es主机地址,tcp端口

  完整内容如下:

  server:

  port: 8081

  spring:

  jackson:

  date-format: yyyy-MM-dd HH:mm:ss

  time-zone: GMT+8

  default-property-inclusion: non_null

  canal.conf:

  mode: tcp

  canalServerHost: 127.0.0.1:11111

  batchSize: 500

  syncBatchSize: 1000

  retries: 0

  timeout:

  accessKey:

  secretKey:

  srcDataSources:

  defaultDS:

  url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true

  username: root

  password: 12345678

  canalAdapters:

  - instance: example

  groups:

  - groupId: g1

  outerAdapters:

  - name: es

  hosts: 127.0.0.1:9300

  properties:

  cluster.name: elasticsearch

  另外需要配置conf/es/*.yml文件,adapter将会自动加载conf / es下的所有.yml结尾的配置文件。在介绍配置前,需要先介绍一下本案例使用的表结构,如下:

  CREATE TABLE `test` (

  `id` int(11) NOT NULL,

  `name` varchar(200) NOT NULL,

  `address` varchar(1000) DEFAULT NULL,

  PRIMARY KEY (`id`)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

  需要手动去es中创建索引,比如这里使用es-head创建,如下图:

  

 

  test索引结构如下:

  {

  mappings:{

  _doc:{

  properties:{

  name:{

  type:text

  },

  address:{

  type:text

  }

  }

  }

  }

  }

  接下来创建test.yml(文件名随意),内容很好理解_index为索引名称,sql为对应语句,内容如下:

  dataSourceKey: defaultDS

  destination: example

  groupId:

  esMapping:

  _index: test

  _type: _doc

  _id: _id

  upsert: true

  sql: select a.id as _id,a.name,a.address from test a

  commitBatch: 3000

  配置完成后,回到canal-adapter根目录,执行命令启动

  bin/startup.sh

  查看日志

  vi logs/adapter/adapter.log

  关闭canal-adapter命令

  bin/stop.sh

  3.测试

  都启动成功后,先查看一下es-head,如图,现在是没有任何数据的。

  

 

  接下来,我们在数据库中插入一条数据进行测试,语句如下:

  INSERT INTO `test`.`test`(`id`, `name`, `address`) VALUES (7, '北京', '北京市朝阳区');

  然后在看一下es-head,如下

  

 

  接下来看一下日志,如下:

  2019-06-22 17:54:15.385 [pool-2-thread-1] DEBUG c.a.otter.canal.client.adapter.es.service.ESSyncService - DML: {data:[{id:7,name:北京,address:北京市朝阳区}],database:test,destination:example,es:1561197255000,groupId:null,isDdl:false,old:null,pkNames:[id],sql:,table:test,ts:1561197255384,type:INSERT}

  Affected indexes: test

  小知识点:上面介绍的查看日志的方法可能不是很好用,推荐使用如下语法,比如查看日志最后200行:

  tail -200f logs/adapter/adapter.log

  4.总结

  1.全量更新不能实现,但是增删改都是可以的。

  2.一定要提前创建好索引。

  3.es配置的是tcp端口,比如默认的9300

おすすめ

転載: blog.csdn.net/qianfeng_dashuju/article/details/93496608