透過 Canal 將 MySQL 資料實時同步到 Easysearch
Canal 是阿里巴巴集團提供的一個開源產品,能夠透過解析資料庫的增量日誌,提供增量資料的訂閱和消費功能。使用 Canal 模擬成 MySQL 的 Slave,實時接收 MySQL 的增量資料 binlog,然後透過 RESTful API 將資料寫入到 Easysearch 中。
前提條件
- 部署 Easysearch 叢集。
- 部署 MySQL 資料庫。
- 部署 Gateway,Canal Adapter 不支援使用 HTTPS 協議連線,使用 Gateway 代理 Easysearch 。
- 部署 Console,方便檢視 Easysearch 資料。
對於自建 MySQL , 需要先開啟 Binlog 寫入功能,配置 binlog-format 為 ROW 模式,my.cnf 中配置如下:
[mysqld] log-bin=mysql-bin # 開啟 binlog binlog-format=ROW # 選擇 ROW 模式 server_id=1 # 配置 MySQL replaction 需要定義,不要和 canal 的 slaveId 重複
建立 canal 使用者,授權 canal 連線 MySQL 具有作為 MySQL slave 的許可權。
CREATE USER canal IDENTIFIED BY 'canal'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ; FLUSH PRIVILEGES;
操作步驟
在進行資料同步時支援自定義索引 Mapping,但需保證 Mapping 中定義的欄位(名稱+型別)與 MySQL 中一致。
1. 準備 MySQL 資料來源
create database canal; use canal; CREATE TABLE `test` ( `id` bigint(32) NOT NULL, `name` text NOT NULL, `age` smallint NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
2. Easysearch 建立索引
PUT test { "settings" : { "index" : { "number_of_shards" : "1", "number_of_replicas" : "1" } }, "mappings" : { "properties" : { "id": { "type": "integer" }, "name": { "type" : "text" }, "age" : { "type" : "integer" } } } }
3. 安裝並啟動 Canal-server
下載:
修改配置檔案
vi conf/example/instance.properties
啟動 canal
sh bin/startup.sh
啟動成功日誌資訊,logs/canal/canal.log
關閉 canal
sh bin/stop.sh
4. 安裝並啟動 Canal-adapter
下載:
修改配置檔案:application.yml
server: port: 8081 spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 default-property-inclusion: non_null canal.conf: flatMessage: true syncBatchSize: 1000 retries: -1 timeout: accessKey: secretKey: consumerProperties: canal.tcp.server.host: 127.0.0.1:11111 canal.tcp.batch.size: 500 srcDataSources: defaultDS: url: jdbc:mysql://127.0.0.1:3306/canal?useUnicode=true username: canal password: canal canalAdapters: groups: - groupId: g1 outerAdapters: - name: logger - name: es7 properties: security.auth: admin:4ad8f8f792e81cd0a6de cluster.name: easysearch
新增 canal-adapter/conf/es7/test.yml,配置索引和表的對映關係。
dataSourceKey: defaultDS destination: example groupId: g1 esMapping: _index: test # es 的索引名稱 _id: _id # es 的_id, 如果不配置該項必須配置下面的pk項_id則會由es自動分配 # sql對映 sql: " select a.id as _id,a.id,a.name,a.age from test a " etlCondition: "where a.id>={}" commitBatch: 3000 # 提交批大小
啟動 canal-adapter
./bin/startup.sh
5. 驗證增量資料同步
在 MySQL 資料庫中,對 test 表插入兩條資料。
insert
test
(
id
,
name
,
age
) values(1,'canal_test1',11);
insert
test
(
id
,
name
,
age
) values(2,'canal_test2',22);
6. 在 Console 中,執行以下命令查詢資料
最後
Canal 同步的是增量資料,不會同步之前的存量資料。要同步存量資料可參考 《使用 Logstash 同步 MySQL 到 Easysearch》
關於 Easysearch
INFINI Easysearch 是一個分散式的近實時搜尋與分析引擎,核心引擎基於開源的 Apache Lucene。Easysearch 的目標是提供一個輕量級的 Elasticsearch 可替代版本,並繼續完善和支援更多的企業級功能。 與 Elasticsearch 相比,Easysearch 更關注在搜尋業務場景的最佳化和繼續保持其產品的簡潔與易用性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70029458/viewspace-2995981/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 阿里 Canal 實時同步 MySQL 增量資料至 ClickHouse 資料庫阿里MySql資料庫
- canal+mysql+kafka實時資料同步安裝、配置MySqlKafka
- 認識資料實時同步神器—Canal
- 使用canal增量同步mysql資料庫資訊到ElasticSearchMySql資料庫Elasticsearch
- 第五節:基於Canal實現MySQL到Redis快取資料同步MySqlRedis快取
- ETL資料整合丨透過ETLCloud工具,將Oracle資料實時同步至Doris中CloudOracle
- MySQL 到Oracle 實時資料同步HYXSMySqlOracle
- 資料庫系列——基於Canal實現MySQL增量資料同步資料庫MySql
- canal資料同步
- oracle 資料透過goldengate 實時同步到kafka訊息佇列中OracleGoKafka佇列
- 資料同步:教你如何實時把資料從 MySQL 同步到 OceanBaseMySql
- 資料同步利器 - canal
- Mysql資料實時同步實踐MySql
- DataX將MySql資料庫資料同步到Oracle資料庫MySql資料庫Oracle
- 通過DTS將RDS的資料實時同步至DataHub
- 資料傳輸 | 利用 DTLE 將 MySQL 資料同步到 DBLEMySql
- 阿里Canal框架資料庫同步-實戰教程阿里框架資料庫
- 使用 Java 客戶端透過 HTTPS 連線到 EasysearchJava客戶端HTTP
- 透過作業定時同步兩個資料庫資料庫
- flnkcdc+datastream實現mysql到mysql資料同步ASTMySql
- 使用canal.adapter同步資料到MySQLAPTMySql
- 透過 C# 將資料寫入到Excel表格C#Excel
- mysql到sqlserver資料庫實時同步工具syncnavigator註冊使用MySqlServer資料庫
- k8s部署canal-1.1.6版本實現MySQL資料庫資料同步K8SMySql資料庫
- mysql通過kafka實現資料實時同步(三)——es叢集配置MySqlKafka
- 用canal監控binlog並實現mysql定製同步資料的功能MySql
- 如何將本地資料同步到 shopify 或 shopify 資料同步到本地
- Mysql 到 Hbase 資料如何實時同步,強大的 Streamsets 告訴你MySql
- 透過Log Miner做Oracle資料同步Oracle
- logstash mysql 準實時同步到 elasticsearchMySqlElasticsearch
- Canal 實戰 | 第一篇:SpringBoot 整合 Canal + RabbitMQ 實現監聽 MySQL 資料庫同步更新 Redis 快取Spring BootMQMySql資料庫Redis快取
- 如何透過API獲取實時商品資料API
- mysql和redis實時同步資料怎麼實現MySqlRedis
- 資料庫學習:透過作業定時同步兩個資料庫(轉)資料庫
- 【PG】mysql時時同步資料至greenplumMySql
- 透過 NTP 進行時鐘同步
- TiDB 作為 MySQL Slave 實現實時資料同步TiDBMySql
- 厲害了!12秒將百萬資料透過EasyExcel匯入MySQL資料庫中ExcelMySql資料庫