当您在使用PolarDB MySQL遇到查询慢的问题时,可以通过数据传输服务DTS(Data Transmission Service),将企业线上的PolarDB MySQL中的生产数据实时同步到阿里云Elasticsearch中进行搜索分析。本文介绍具体的实现方法。
背景信息
本案例需要使用以下三个云产品,相关介绍如下:- 数据传输服务DTS是一种集数据迁移、数据订阅及数据实时同步于一体的数据传输服务,详情请参见数据传输服务DTS。DTS支持同步的SQL操作包括:Insert、Delete、Update。 重要 进行数据同步时,请选择DTS支持的数据源及其版本,详情请参见同步方案概览。
- PolarDB是阿里云自研的下一代关系型云数据库,有三个独立的引擎,分别可以100%兼容MySQL、100%兼容PostgreSQL、高度兼容Oracle语法。存储容量最高可达100TB,单库最多可扩展到16个节点,适用于企业多样化的数据库应用场景,详情请参见PolarDB MySQL概述。
- Elasticsearch是一个基于Lucene的实时分布式的搜索与分析引擎,它提供了一个分布式服务,可以使您快速的近乎于准实时的存储、查询和分析超大数据集,通常被用来作为构建复杂查询特性和需求强大应用的基础引擎或技术,详情请参见什么是阿里云Elasticsearch。
本文适用的场景:对实时同步要求较高的关系型数据库中数据的同步场景。
注意事项
- DTS在执行全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据同步前评估源库和目标库的性能,同时建议您在业务低峰期执行数据同步(例如源库和目标库的CPU负载在30%以下)。
- DTS不支持同步DDL操作,如果源库中待同步的表在同步的过程中已经执行了DDL操作,您需要先移除同步对象,然后在Elasticsearch实例中移除该表对应的索引,最后新增同步对象。详情请参见移除同步对象和新增同步对象。
- 如果源库中待同步的表需要执行增加列的操作,您只需先在Elasticsearch实例中修改对应表的mapping,然后在源库中执行相应的DDL操作,最后暂停并启动DTS同步实例即可。
使用限制
通过DTS将数据同步至阿里云Elasticsearch,不支持7.16版本的Elasticsearch实例。
操作流程
- 步骤一:环境准备完成创建Elasticsearch实例、创建PolarDB MySQL集群、准备测试数据等任务。
- 步骤二:配置数据同步链路通过数据传输服务DTS,快速创建并启动PolarDB MySQL到阿里云Elasticsearch的实时同步作业。
- 步骤三:查看数据同步结果在阿里云Elasticsearch的Kibana控制台中查看同步成功的数据。
- 步骤四:验证增量数据同步验证在PolarDB MySQL数据库中新增数据时,数据的同步效果。
步骤一:环境准备
- 创建阿里云Elasticsearch实例,并开启实例的自动创建索引功能。 具体操作步骤请参见步骤一:创建实例和配置YML参数。本文使用6.7版本的实例。说明 阿里云Elasticsearch为了保证用户操作数据的安全性,默认把自动创建索引的配置设置为不允许。通过DTS同步数据,使用的是提交数据的方式创建索引,而不是Create index API方式。所以在同步数据前,需要先开启集群的自动创建索引功能。
- 创建云数据库PolarDB MySQL集群,并开启Binlog。
- 创建PolarDB MySQL数据库和表,并插入测试数据。 具体操作步骤请参见管理数据库。本文使用的表结构和测试数据如下。
- 建表语句
CREATE TABLE `product` ( `id` bigint(32) NOT NULL AUTO_INCREMENT, `name` varchar(32) NULL, `price` varchar(32) NULL, `code` varchar(32) NULL, `color` varchar(32) NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
- 测试数据
INSERT INTO `estest`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (1,'mobile phone A','2000','amp','golden'); INSERT INTO `estest`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (2,'mobile phone B','2200','bmp','white'); INSERT INTO `estest`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (3,'mobile phone C','2600','cmp','black'); INSERT INTO `estest`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (4,'mobile phone D','2700','dmp','red'); INSERT INTO `estest`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (5,'mobile phone E','2800','emp','silvery');
- 建表语句
步骤二:配置数据同步链路
- 登录数据传输控制台。
- 在左侧导航栏,选择 。说明 本文操作以DTS新版控制台为例,旧版控制台相关操作请参见数据同步操作指导。
- 单击创建任务,按照页面提示创建并配置数据同步任务。您需要依次完成源库及目标库配置、任务对象配置、映射字段配置、高级配置和库表字段配置,本文使用的配置及相关说明如下,更多详细信息请参见PolarDB MySQL为源的数据同步和PolarDB-X同步至Elasticsearch。
- 配置完成后,根据页面提示保存任务、进行预检查、购买并启动任务。购买成功后,同步任务正式开始,您可在数据同步界面查看具体任务进度。待全量同步完成,增量同步进行中时,您即可在Elasticsearch中查看同步成功的数据。
步骤三:查看数据同步结果
- 登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。登录Kibana控制台的具体操作,请参见登录Kibana控制台。说明 本文以阿里云Elasticsearch 6.7.0版本为例,其他版本操作可能略有差别,请以实际界面为准。
- 在左侧导航栏,单击Dev Tools。
- 在Console中,执行如下命令查看全量数据同步结果。
GET /product/_doc/_search
预期结果如下。 - 通过控制台操作查看同步成功的数据。
步骤四:验证增量数据同步
- 进入PolarDB控制台。
- 在PolarDB MySQL数据库中插入一条数据。
INSERT INTO `estest`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (6,'mobile phone F','2750','fmp','white');
- 登录Kibana控制台,在左侧导航栏,单击Discover,选择您已创建的索引模式,查看同步成功的增量数据。说明 您也可以使用同样的方式,在PolarDB MySQL数据库中删除或修改数据,然后查看数据同步结果。