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

通過DTS將MySQL數據實時同步到阿里云ES

當您需要將企業線上的RDS MySQL中的生產數據實時同步到阿里云Elasticsearch(ES)中進行搜索分析時,可通過數據傳輸服務DTS快速創建RDS MySQL到阿里云ES的實時同步作業,適用于對實時同步要求較高的同步場景。本文介紹如何配置RDS MySQL到阿里云ES實例的實時同步作業,并驗證全量和增量數據同步的結果。

背景信息

  • 數據傳輸服務DTS是一種集數據遷移、數據訂閱及數據實時同步于一體的數據傳輸服務,詳細信息請參見數據傳輸服務DTS。DTS支持同步的SQL操作包括Insert、Delete和Update,支持同步的數據源版本要求請參見同步方案概覽

  • 通過在DTS中配置從源(MySQL)同步到目標(ES),可實現全量、增量數據同步。適用于對實時同步要求較高的關系型數據庫中數據的同步場景或需要將關系型數據庫中的全量或增量數據同步到阿里云ES場景。

注意事項

  • DTS不支持同步DDL操作,如果源庫中待同步的表在同步的過程中已經執行了DDL操作,您需要先移除同步對象,然后在ES實例中移除該表對應的索引,最后新增同步對象。詳情請參見移除同步對象新增同步對象

  • 如果源庫中待同步的表需要執行增加列的操作,您只需先在ES實例中修改對應表的mapping,然后在源庫中執行相應的DDL操作,最后暫停并啟動DTS增量數據同步任務。

  • DTS在執行全量數據初始化時將占用源庫和目標庫一定的讀寫資源,可能會導致數據庫的負載上升,在數據庫性能較差、規格較低或業務量較大的情況下(例如源庫有大量慢SQL、存在無主鍵表或目標庫存在死鎖等),可能會加重數據庫壓力,甚至導致數據庫服務不可用。因此您需要在執行數據同步前評估源庫和目標庫的性能,同時建議您在業務低峰期執行數據同步(例如源庫和目標庫的CPU負載在30%以下)。

    • 在業務高峰期全量同步數據,可能造成全量數據同步失敗,重啟全量同步任務即可。

    • 在業務高峰期增量同步數據,可能出現數據同步延遲的情況。

  • 由于MySQL和ES實例支持的數據類型不同,數據類型無法一一對應。所以DTS在進行結構初始化時,會根據目標庫支持的數據類型進行類型映射,詳情請參見結構初始化涉及的數據類型映射關系

操作流程

  1. 準備環境:先在源庫RDS MySQL中添加待同步數據,然后創建目標庫ES實例,并為ES實例開啟自動創建索引功能。

  2. 創建數據同步任務:在DTS控制臺配置并購買數據同步任務。

  3. 驗證數據同步結果:先在ES的Kibana控制臺驗證全量同步結果,然后在源庫RDS MySQL中添加數據,最后在ES的Kibana控制臺驗證增量同步結果。

操作步驟

步驟一:環境準備

文本以將RDS MySQL 8.0版本實例中的數據同步到阿里云ES 7.10版本實例中為例。

準備源庫待同步數據

  1. 創建RDS MySQL 8.0版本實例。具體操作,請參見創建RDS MySQL實例

  2. 創建賬號和數據庫test_mysql。具體操作,請參見創建數據庫和賬號

  3. 在數據庫test_mysql中,新建表es_test并插入數據。使用的建表語句及數據如下:

    -- create table
    CREATE TABLE `es_test` (
        `id` bigint(32) NOT NULL,
        `name` varchar(32) NULL,
        `age` bigint(32) NULL,
        `hobby` varchar(32) NULL,
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB
    DEFAULT CHARACTER SET=utf8;
    
    -- insert data
    INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (1,'user1',22,'music');
    INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (2,'user2',23,'sport');
    INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (3,'user3',43,'game');
    INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (4,'user4',24,'run');
    INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (5,'user5',42,'basketball');

準備目標庫ES實例

  1. 創建阿里云ES 7.10版本實例。具體操作,請參見創建阿里云Elasticsearch實例

  2. ES實例開啟自動創建索引功能。具體操作,請參見配置YML參數

    image

步驟二:創建數據同步任務

  1. 登錄新版DTS同步任務的列表頁面

  2. 單擊創建任務

  3. 按照頁面提示配置數據同步任務。

    說明

    以下步驟中涉及的參數的說明,請參見RDS MySQL同步至Elasticsearch

    1. 配置源庫及目標庫,在頁面下方單擊測試連接以進行下一步

      image

    2. 配置任務對象。

      image

    3. 配置高級設置,本文高級配置保持默認。

    4. 庫表列配置頁面,單擊全部設置為非_routing策略,將全部表設置為非_routing策略。

      說明

      目標庫ES實例為7.x版本時,全部表必須設置為非_routing策略。

  4. 配置完成后,根據頁面提示保存并預檢查任務、購買并啟動任務。

    購買并啟動任務成功后,同步任務正式開始。您可在數據同步界面查看具體任務進度,待全量同步完成后,您即可在ES實例中查看同步成功的數據。

    image

步驟三(可選):驗證數據同步結果

  1. 登錄目標ES實例的Kibana控制臺。

    登錄Kibana控制臺,請參見登錄Kibana控制臺

  2. 在Kibana頁面的左上角,選擇菜單.png > Management > 開發工具(Dev Tools),在控制臺(Console)中執行以下命令。

  3. 驗證全量數據同步結果。

    執行如下命令,查看全量數據同步結果。

    GET /es_test/_search

    預期結果如下:

    {
      "took" : 10,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 5,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "es_test",
            "_type" : "es_test",
            "_id" : "3",
            "_score" : 1.0,
            "_source" : {
              "id" : 3,
              "name" : "user3",
              "age" : 43,
              "hobby" : "game"
            }
          },
          {
            "_index" : "es_test",
            "_type" : "es_test",
            "_id" : "5",
            "_score" : 1.0,
            "_source" : {
              "id" : 5,
              "name" : "user5",
              "age" : 42,
              "hobby" : "basketball"
            }
          },
          {
            "_index" : "es_test",
            "_type" : "es_test",
            "_id" : "4",
            "_score" : 1.0,
            "_source" : {
              "id" : 4,
              "name" : "user4",
              "age" : 24,
              "hobby" : "run"
            }
          },
          {
            "_index" : "es_test",
            "_type" : "es_test",
            "_id" : "2",
            "_score" : 1.0,
            "_source" : {
              "id" : 2,
              "name" : "user2",
              "age" : 23,
              "hobby" : "sport"
            }
          },
          {
            "_index" : "es_test",
            "_type" : "es_test",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "id" : 1,
              "name" : "user1",
              "age" : 22,
              "hobby" : "music"
            }
          }
        ]
      }
    }
  4. 驗證增量數據同步結果。

    1. 通過以下SQL語句在RDS MySQL中插入一條數據。

      INSERT INTO `test_mysql`.`es_test` (`id`,`name`,`age`,`hobby`) VALUES (6,'user6',30,'dance');
    2. 等待增量同步完成后,再次執行命令GET /es_test/_search,查看增量數據同步結果。

      預期結果如下:

      {
        "took" : 541,
        "timed_out" : false,
        "_shards" : {
          "total" : 5,
          "successful" : 5,
          "skipped" : 0,
          "failed" : 0
        },
        "hits" : {
          "total" : {
            "value" : 6,
            "relation" : "eq"
          },
          "max_score" : 1.0,
          "hits" : [
            {
              "_index" : "es_test",
              "_type" : "es_test",
              "_id" : "3",
              "_score" : 1.0,
              "_source" : {
                "id" : 3,
                "name" : "user3",
                "age" : 43,
                "hobby" : "game"
              }
            },
            {
              "_index" : "es_test",
              "_type" : "es_test",
              "_id" : "5",
              "_score" : 1.0,
              "_source" : {
                "id" : 5,
                "name" : "user5",
                "age" : 42,
                "hobby" : "basketball"
              }
            },
            {
              "_index" : "es_test",
              "_type" : "es_test",
              "_id" : "4",
              "_score" : 1.0,
              "_source" : {
                "id" : 4,
                "name" : "user4",
                "age" : 24,
                "hobby" : "run"
              }
            },
            {
              "_index" : "es_test",
              "_type" : "es_test",
              "_id" : "2",
              "_score" : 1.0,
              "_source" : {
                "id" : 2,
                "name" : "user2",
                "age" : 23,
                "hobby" : "sport"
              }
            },
            {
              "_index" : "es_test",
              "_type" : "es_test",
              "_id" : "6",
              "_score" : 1.0,
              "_source" : {
                "name" : "user6",
                "id" : 6,
                "age" : 30,
                "hobby" : "dance"
              }
            },
            {
              "_index" : "es_test",
              "_type" : "es_test",
              "_id" : "1",
              "_score" : 1.0,
              "_source" : {
                "id" : 1,
                "name" : "user1",
                "age" : 22,
                "hobby" : "music"
              }
            }
          ]
        }
      }