日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過Canal將MySQL數據同步到阿里云ES

如果您需要將MySQL中的增量數據實時同步至阿里云Elasticsearch(簡稱ES)實例或ES Serverless應用,且您對數據同步的實時性要求較高,可以通過Canal來實現。

背景信息

Canal是阿里巴巴集團提供的一個開源產品,能夠通過解析數據庫的增量日志,提供增量數據的訂閱和消費功能。Canal的功能原理及詳細說明請參見Canal。使用Canal模擬成MySQL的Slave,實時接收MySQL的增量數據binlog,然后通過RESTful API將數據寫入到阿里云ES實例或ES Serverless應用中,適用于對數據同步的實時性要求較高的場景。

前提條件

已創建RDS MySQL實例、阿里云ES實例、阿里云ECS實例。建議您在同一專有網絡下創建相關實例。

使用限制

  • 本方案僅支持將MySQL增量數據同步至阿里云ES。

  • 安裝的JDK版本必須大于等于1.8.0。

  • Canal 1.1.4版本不支持ES 7.x版本。

    ES 7.x版本和ES Serverless應用的數據寫入需使用Canal 1.1.5版本,ES 8.x版本請選擇1.1.7版本。您也可以通過其他方式(例如Logstash、DTS)實現MySQL數據同步。

  • 在進行數據同步時支持自定義索引Mapping,但需保證Mapping中定義的字段(名稱+類型)與MySQL中一致。

  • 本方案需要您自行保證Canal的可用性,避免出現業務不可用或故障。例如:當出現ECS重啟,Canal異常退出等場景時如何繼續同步數據等。

  • Canal Adapter不支持使用HTTPS協議連接阿里云ES實例。

操作步驟

步驟一:準備MySQL數據源

進入RDS控制臺,創建RDS MySQL數據庫和表。具體操作請參見RDS MySQL快速入門。本文使用的建表語句如下。

-- create table
CREATE TABLE `es_test` (
    `id` bigint(32) NOT NULL,
    `name` text NOT NULL,
    `count` text NOT NULL,
    `color` text NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8;

步驟二:創建索引

  1. 登錄目標阿里云ES實例的Kibana控制臺,具體操作請參見登錄Kibana控制臺

    說明

    本文以阿里云ES 6.7.0版本為例,其他版本操作可能略有差別,請以實際界面為準。

  2. 在左側導航欄,單擊Dev Tools
  3. Console中,執行以下命令創建索引。

    以下示例創建的索引名稱為es_test,包含count、id、name和color字段。

    重要

    mappings中的字段需要與步驟一:準備MySQL數據源中創建的字段(名稱和類型)保持一致。

    PUT es_test?include_type_name=true
    {
    
        "settings" : {
          "index" : {
            "number_of_shards" : "5",
            "number_of_replicas" : "1"
          }
        },
        "mappings" : {
            "_doc" : {
                "properties" : {
                  "count": {          
                       "type": "text"       
                   },
                  "id": {
                       "type": "integer"
                   },
                   "name": {
                        "type" : "text",
                        "analyzer": "ik_smart"                   
                    },
                    "color" : {
                        "type" : "text"                    
                    }
                }
            }
        }
    }

    創建成功后,返回如下結果。

    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "index" : "es_test"
    }

步驟三:安裝JDK

  1. 連接ECS實例。

    具體操作請參見通過密碼或密鑰認證登錄Linux實例

    說明

    本文檔以普通用戶權限為例。

  2. 查看可用的JDK軟件包列表。

    sudo yum search java | grep -i --color JDK
  3. 選擇合適的版本,安裝JDK。

    本文選擇java-1.8.0-openjdk-devel.x86_64

    sudo yum install java-1.8.0-openjdk-devel.x86_64
  4. 配置環境變量。

    1. 打開etc文件夾下的profile文件。

      vim ~/.bash_profile
    2. 在文件內添加如下的環境變量。

      export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64
      export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      export PATH=$PATH:$JAVA_HOME/bin
      重要

      JAVA_HOME需要替換為您JDK的安裝路徑,可通過find / -name 'java'命令查看。

    3. 按下Esc鍵,然后使用:wq保存文件并退出vi模式,隨后執行以下命令使配置生效。

      source ~/.bash_profile
  5. 執行以下命令,驗證JDK是否安裝成功。

    java -version

    顯示如下結果說明JDK安裝成功。

    openjdk version "1.8.0_362"
    OpenJDK Runtime Environment (build 1.8.0_362-b08)
    OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)

步驟四:安裝并啟動Canal-server

  1. 下載Canal-server。

    本文使用1.1.4版本。

    wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
    說明
    • 目前Canal 1.1.5版本已支持ES 7.0版本,如果您使用的是ES 7.0,需要下載Canal 1.1.5版本。詳細信息請參見Canal release note

    • 下載Canal-server和Canal-adapter需要連接公網,請確保ECS實例可以訪問公網。

  2. 解壓。

    tar -zxvf canal.deployer-1.1.4.tar.gz
  3. 修改conf/example/instance.properties文件。

    vi conf/example/instance.properties

    修改conf/example/instance.properties文件

    配置項

    說明

    canal.instance.master.address

    需要設置為<RDS MySQL數據庫的內網地址>:<內網端口>,相關信息可在RDS MySQL實例的基本信息頁面獲取。例如rm-bp1u1xxxxxxxxx6ph.mysql.rds.aliyuncs.com:3306。

    canal.instance.dbUsername

    RDS MySQL數據庫的賬號名稱,可在實例的賬號管理頁面獲取。

    canal.instance.dbPassword

    RDS MySQL數據庫的密碼。

  4. 按下Esc鍵,然后使用:wq命令保存文件并退出vi模式。

  5. 啟動Canal-server,并查看日志。

    ./bin/startup.sh
    cat logs/canal/canal.log

    啟動canal-server

步驟五:安裝并啟動Canal-adapter

  1. 下載Canal-adapter。

    本文使用1.1.4版本。

    wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz
    說明
    • 目前Canal 1.1.5版本已支持ES 7.0版本,如果您使用的是ES 7.0,需要下載Canal 1.1.5版本。詳細信息請參見Canal release note

    • 下載Canal-server和Canal-adapter需要連接公網,請確保ECS實例可以訪問公網。

  2. 解壓。

    tar -zxvf canal.adapter-1.1.4.tar.gz
  3. 修改conf/application.yml文件。

    vi conf/application.yml

    image..png

    配置項

    說明

    canal.conf.canalServerHost

    canalDeployer訪問地址。保持默認(127.0.0.1:11111)即可。

    canal.conf.srcDataSources.defaultDS.url

    需要設置為jdbc:mysql://<RDS MySQL內網地址>:<內網端口>/<數據庫名稱>?useUnicode=true,相關信息可在RDS MySQL實例的基本信息頁面獲取。例如jdbc:mysql://rm-bp1xxxxxxxxxnd6ph.mysql.rds.aliyuncs.com:3306/elasticsearch?useUnicode=true。

    canal.conf.srcDataSources.defaultDS.username

    RDS MySQL數據庫的賬號名稱,可在RDS MySQL實例的賬號管理頁面獲取。

    canal.conf.srcDataSources.defaultDS.password

    RDS MySQL數據庫的密碼。

    canal.conf.canalAdapters.groups.outerAdapters.name

    • ES實例:無需操作

    • Serverless應用:定位到name:es的位置,將es改為es7。

    canal.conf.canalAdapters.groups.outerAdapters.hosts

    定位到name:es的位置,將hosts替換為<ES實例或Serverless應用的內網地址>:<內網端口>,相關信息可在ES實例或Serverless應用的基本信息頁面獲取。例如,es-cn-v64xxxxxxxxx3medp.elasticsearch.aliyuncs.com:9200或cj-******.public.cn-hangzhou.es-serverless.aliyuncs.com:9200

    canal.conf.canalAdapters.groups.outerAdapters.mode

    必須設置為rest。

    canal.conf.canalAdapters.groups.outerAdapters.properties.security.auth

    需要設置為<ES實例的賬號或Serverless應用的用戶名>:<密碼>。例如elastic:es_password或test-t53:password

    canal.conf.canalAdapters.groups.outerAdapters.properties.cluster.name

    ES實例的ID或Serverless的應用名稱,可在ES實例或Serverless應用的基本信息頁面獲取。例如es-cn-v64xxxxxxxxx3medp。

  4. 按下Esc鍵,然后使用:wq命令保存文件并退出vi模式。

  5. 同樣的方式,修改conf/es/*.yml文件,定義MySQL數據到ES數據的映射字段。

    修改conf/es/*.yml文件

    配置項

    說明

    esMapping._index

    步驟二:創建索引章節中,在ES實例中所創建的索引的名稱。本文使用es_test

    esMapping._type

    步驟二:創建索引章節中,在ES實例中所創建的索引的類型。本文使用_doc

    esMapping._id

    需要同步到ES實例的文檔的id,可自定義。本文使用_id

    esMapping.sql

    SQL語句,用來查詢需要同步到ES中的字段。本文使用select t.id as _id,t.id,t.count,t.name,t.color from es_test t

  6. 啟動Canal-adapter服務,并查看日志。

    ./bin/startup.sh
    cat logs/adapter/adapter.log
    說明

    本文以MySQL 5.7版本為例,如果您使用的是MySQL其它版本,需要將MySQL驅動器替換為相應的版本,否則可能會導致啟動失敗,詳細信息請參見常見問題

    服務啟動正常時,結果如下所示。Canal-adapter服務日志

步驟六:驗證增量數據同步

  1. 在RDS MySQL數據庫中,新增、修改或刪除數據庫中es_test表的數據。

    insert `ES`.`es_test`(`count`,`id`,`name`,`color`) values('11',2,'canal_test2','red');
  2. 登錄目標阿里云ES實例的Kibana控制臺,具體操作請參見登錄Kibana控制臺

  3. 在左側導航欄,單擊Dev Tools
  4. Console中,執行以下命令查詢同步成功的數據。

    GET /es_test/_search

    預期結果如下。數據同步成功結果

    重要

    Canal同步的是增量數據,不會同步之前的存量數據。

常見問題

Q:啟動Canal-adapter時,adapter.log日志顯示異常,如何解決?錯誤日志為:java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource

at com.alibaba.otter.canal.client.adapter.es7x.ES7xAdapter.init(ES7xAdapter.java:54) ~[client-adapter.es7x-1.1.5-jar-with-dependencies.jar:na]

A:將canal.adapter-1.1.5\plugin下的client-adapter.es7x-1.1.5-jar-with-dependencies.jar替換為canal-1.1.5-alpha-2版本下的對應文件。

說明

您可以參考Canal的issues解決,請參見Canal issues

以root權限用戶為例,操作步驟如下:

  1. 下載canal-1.1.5-alpha-2版本。詳細信息請參見Canal release note

    wget https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-2/canal.adapter-1.1.5-SNAPSHOT.tar.gz
  2. 解壓文件。

    tar -zxvf canal.adapter-1.1.5-SNAPSHOT.tar.gz
  3. 拷貝canal-1.1.5-alpha-2 版本中plugin下的client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar放到canal.adapter-1.1.5\plugin目錄下。

    說明

    實際拷貝文件的目錄需根據您創建的目錄結構來。

    cp canal.adapter-1.1.5-SNAPSHOT/plugin/client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar canal/canal.adapter/plugin
  4. 刪除canal.adapter-1.1.5\plugin下的client-adapter.es7x-1.1.5-jar-with-dependencies.jar。

    rm -rf client-adapter.es7x-1.1.5-jar-with-dependencies.jar
  5. 修改名字。

    mv client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar client-adapter.es7x-1.1.5-jar-with-dependencies.jar 

Q:啟動Canal-adapter時,adapter.log日志顯示異常,如何解決?錯誤日志為java.sql.SQLException: Unknown system variable 'query_cache_size'

A:可能是由于Canal-adapter中自帶的MySQL驅動版本與連接的MySQL數據庫版本不一致導致,例如:使用的canal.adapter-1.1.4時,其自帶的MySQL驅動器為mysql-connector-java-5.1.40.jar,在連接MySQL8時就會出現如上所述的異常信息。可更換Canal-adapter中的MySQL驅動器版本進行解決。

Q:使用Canal同步MySQL 8.0版本的數據,如何將MySQL驅動器版本替換成8.0?

A:以下操作步驟以root權限用戶為例。

  1. 下載8.0版本的MySQL驅動器。

    wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.29.zip
  2. 解壓。

    unzip mysql-connector-java-8.0.29.zip
  3. 拷貝文件到Canal-adapter的lib目錄下。

    mv mysql-connector-java-8.0.29/mysql-connector-java-8.0.29.jar lib/
  4. 添加權限。

    chmod 777 lib/mysql-connector-java-8.0.29.jar
    chmod +st lib/mysql-connector-java-8.0.29.jar
  5. 刪除5.x版本的驅動器。

    rm -rf lib/mysql-connector-java-5.1.40.jar

相關文檔