华为云计算 云知识 MySQL数据库中某表全量导入到es中,具体如何操作呢?

MySQL数据库中某表全量导入到es中,具体如何操作呢?

怎么将MySQL数据库中某表全量导入到es中,这个问题大概困扰了不少人。今天小编将从具体的应用场景入手向大家介绍MySQL数据库中某表全量导入到es中的实现思路和具体操作步骤。那么,话不多说,跟着小编一起来学习吧!

MySQL数据库中某表全量导入到es中的应用场景

对于MySQL数据库中某表全量导入到es中,首先我们来看一个场景:想要统计新订单的实时增加情况?想要实时跟踪库存的变化?想要订阅业务数据库的变更?下游业务希望实时感知数据库的变更,但频繁查询增量数据又影响业务数据库性能。如何又快又好的做好这些事,而又不影响线上数据库的性能?

其具体的实现思路:代码对接上游业务数据库,实时对Binlog数据分析、解析、PB格式序列化和压缩后,将数据库变更推送到Kafka。下游各应用消费Kafka的数据从而实时获取上游业务库的数据变更。这样,如果下游系统是使用ES系统的话,就可以再message system注册成为consumer,一旦上游数据库产生变更,就可以及时获取到kafka发来的消息,将MySQL数据库变更同步到elasticsearch库。

MySQL数据库中某表全量导入到es中——数据的导入

目前MySQL 数据库数据量约10亿,有几张大表1亿左右,直接在MySQL查询出现各种效率问题,因此想着将数据导一份到ES,从而实现大数据快速检索的功能。通过Logstash插件批量导数据,会出现各种奇怪的问题,例如ES 内存暴满,MySQL 所在服务器内存暴,最主要的是在一次导数时不能所导的数据量不能太大。经过一次次试探Logstash与优化Logstash导数的最后,最终还是动手直接运用ES提供的api进行导数了。

目前直接模拟测试批量导数据,无论是通过Logstash还是ES 提供的Api峰值均能达到10万每秒左右。下面上代码,主要是通过官网提供的api (RestHighLevelClient、BulkProcessor)整理而来。目前由于MySQL 查询出来的数据需要进行一些处理,基本可达到3.5万+每秒。这个速度还有不小的优化空间,比如笔者通过稍微修改下述代码,启动几个线程同时执行bulk多张表,从kibana界面看出速度达到了成倍的提升,因为速度已基本达到小编所想要的,便不怎么进行优化代码了。

MySQL数据库中某表全量导入到es中——操作步骤

首先MySQL数据库中某表全量导入到es中之前,下载安装包,注意下载到指定文件夹。

1.安装logstash:进入到opt文件夹打开终端 执行以下命令:wget -c https://artifacts.elastic.co/downloads/logstash/logstash-6.4.0.zip,加上-c支持断点续传。

2.解压logstash:unzip logstash-6.4.0.zip。

3.进入到logstash bin目录:cd logstash-6.4.0/bin。

4.安装logstash-jdbc https://blog.csdn.net/my201110lc/article/details/logstash-plugin install logstash-input-jdbc。

5.编写配置文件(jdbc.sql和jdbc.conf,建议在bin目录下vim jdbc.conf)。

6.首先在bin目录下新建一个MySQL目录,里面包含jdbc.conf,jdbc.sql文件,加入MySQL的驱动,jdbc.conf内容:jdbc.sql里面就直接写sql语句就行了,全量同步sql语句就不要写testid了 增量同步就加上where条件 where?testid > :sql_last_value。

7.开始导入(需要用root账户启动):https://blog.csdn.net/my201110lc/article/details/logstash -f MySQL/jdbc.conf。

以上就是有关怎么将MySQL数据库中某表全量导入到es中的实现思路和具体步骤,相信大家应该有所了解了,那么可以动手操作试试看啦!我们下期再会了!

上一篇:新基建浪潮开启,产业创新提速,华为云成政企智能升级首选 下一篇:MySQL Workbench的审核检查功能

云数据库 RDS for MySQL

云数据库 RDS for MySQL拥有即开即用、稳定可靠、安全运行、弹性伸缩、轻松管理、经济实用等特点,让您更加专注业务发展。

价格低至¥0.32/小时起,买1年83折

https://www.huaweicloud.com/product/mysql.html