MYSQL千万级别数据量迁移Elasticsearch5.6.1实战
从关系型库中迁移数据算是比较常见的场景,这里借助两个工具来完成本次的数据迁移,考虑到数据量并不大(不足两千万),未采用snapshot快照的形式进行。
Elasticsearch-jdbc,Github地址:https://github.com/jprante/elasticsearch-jdbc,从插件管方的兼容版本看,是不支持直接写入elasticsearch 5.6.1及更高版本中。
| Release date | JDBC Importer version | Elasticsearch version |
|---|---|---|
| Aug 28 2016 | 2.3.4.1 | 2.3.4 |
不能直接写入es5,此处方案采用elasticsearch2.3.4做一个数据中转,(主因是前期采用的elasticsearch 2.3.4,本次升级才采用5.6.1)
Elasticsearch-dump,Github地址:https://github.com/taskrabbit/elasticsearch-dump,官方简介提示如下
Version 3.0.0 of Elasticdump has the default queries updated to only work for ElasticSearch version 5+. The tool may be compatible with earlier versions of Elasticsearch, but our version detection method may not work for all ES cluster topologies
Elasticdump是支持es2.x至es5.x版本的。
下面开始数据迁移数据。
1、准备工作
安装elasticsearch-jdbc,其依赖jvm环境,事先要准备好jvm环境。从官方下载压缩包,解压即可使用,解压后有两个目录(bin/lib),脚本存放在bin目录,下面有示例脚本供参考。安装过程参考官方文档。
Elasticdump依赖node环境,所以需要事先安装Node环境,再通过npm命令安装。安装过程参考官方文档。
2、准备elasticsearch-jdbc迁移脚本
#!/bin/shDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"bin=${DIR}/../binlib=${DIR}/../libecho '{"type": "jdbc","jdbc": {"elasticsearch.autodiscover": true,"url": "jdbc:mysql://192.168.1.102:3306/test","user": "root","password": "root","sql": "select *,tid as _id from tb_db_info","elasticsearch": {"host": "192.168.12.1","port": 9300},"elasticsearch.cluster":"my-application","index": "testIndex","type": "testType"}}' | java \-cp "${lib}/*" \-Dlog4j.configurationFile=${bin}/log4j2.xml \org.xbib.tools.Runner \org.xbib.tools.JDBCImporter
脚本内容很容易理解,执行此脚本,查看数据是否从mysql中写入elasticsearch索引库中。
建议以后台挂起的方式执行任务,防止连接中断导致任务中断。
若对目标索引有特殊要求,比如某些字段不进行analyze等,可提前建立好索引及映射机制,再使用脚本进行数据导入工作。
3,采用Elasticdump迁移数据
从官方的介绍中可以看到,大致分三个步骤:
# Copy an index from production to staging with analyzer and mapping:elasticdump \--input=http://production.es.com:9200/my_index \--output=http://staging.es.com:9200/my_index \--type=analyzerelasticdump \--input=http://production.es.com:9200/my_index \--output=http://staging.es.com:9200/my_index \--type=mappingelasticdump \--input=http://production.es.com:9200/my_index \--output=http://staging.es.com:9200/my_index \--type=data
为提高脚本的执行效率,特殊关注下limit参数,数据批的大小,默认是100条,比较小的,这个需要根据具体的环境来调整,建议1000以上。脚本执行过程中会有日志输出,显示数据传输的进程。
若对目标索引需要特殊处理的情况,而不采用上面两个脚本——type类型为:analyzer及mapping,制定好自己的索引及映射关系后,再使用工具进行迁移。
为应对脚本针对大数据量的迁移执行中断的情况,工具中有参数offset,但只针对写索引有效,并不能按我们的预期直接从offset中断处继续读中断后的数据进而去迁移数据,而是继续从头开始,此处需要特别注意。
limit参数不宜调试过大,容易导致timeout的情况发生,近而导致任务中断,执行失败。
脚本运行建议以后台挂起的形式运行,防止因连接中断导致任务中断。
实际操作时请结合自身的具体环境,希望能帮到你。
扩展阅读:
MYSQL千万级别数据量迁移Elasticsearch5.6.1实战的更多相关文章
- 千万级别数据量mysql优化策略
表结构优化 1. 使用独立表空间 独立表空间指的是innodb表的一种数据结构 独占表空间: 每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件 ...
- Mysql 千万级别数据数据查询
1.构建数据 --创建MyISAM模式表方便批量跑数据 CREATE TABLE `logs1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `logtype` v ...
- mysql数据库千万级别数据的查询优化和分页测试
原文地址:原创 mysql数据库千万级别数据的查询优化和分页测试作者:于堡舰 本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处 http://blog.sina.com. ...
- 从SQL Server到MySQL,近百亿数据量迁移实战
从SQL Server到MySQL,近百亿数据量迁移实战 狄敬超(3D) 2018-05-29 10:52:48 212 沪江成立于 2001 年,作为较早期的教育学习网站,当时技术选型范围并不大:J ...
- mysql处理大数据量的查询速度究竟有多快和能优化到什么程度
mysql处理大数据量的查询速度究竟有多快和能优化到什么程度 深圳-ftx(1433725026) 18:10:49 mysql有没有排名函数啊 横瓜(601069289) 18:13:06 无 ...
- (转载)MYSQL千万级数据量的优化方法积累
转载自:http://blog.sina.com.cn/s/blog_85ead02a0101csci.html MYSQL千万级数据量的优化方法积累 1.分库分表 很明显,一个主表(也就是很重要的表 ...
- DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化、SQL优化方法
ylbtech-DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化.SQL优化方法 1.返回顶部 1. 1,单库表别太多,一般保持在200以下为宜 2,尽量避免SQL中出现运算,例如se ...
- mysql的大数据量的查询
mysql的大数据量查询分页应该用where 条件进行分页,limit 100000,100,mysql先查询100100数据量,查询完以后,将 这些100000数据量屏蔽去掉,用100的量,但是如果 ...
- elasticsearch5.0集群大数据量迁移方法及注意事项
当es集群的数据量较小的情况下elasticdump这个工具比较方便,但是当数据量达到一定级别比如上百G的时候,elasticdump速度就很慢了,此时我们可以使用快照的方法进行备份 elasticd ...
随机推荐
- python 识别身份证号码
# !/usr/bin/python # -*-coding:utf-8-*- import sys import time time1 = time.time() from PIL import I ...
- 【全面解禁!真正的Expression Blend实战开发技巧】第三章 从最常用ButtonStyle开始 - TextButton
原文:[全面解禁!真正的Expression Blend实战开发技巧]第三章 从最常用ButtonStyle开始 - TextButton 在实际项目中,使用blend做的最多的一定是各种自定义But ...
- Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案
原文:Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案 一打开虚拟机电脑就立马蓝屏重启,新建虚拟机也没用,然后就开始 ...
- Qt+QZXing编写识别二维码的程序
本人最近在用Qt编写程序,需要用编写二维码识别功能.在网上搜寻一番,找到了QZXing.配置过程中确实出了一大把汗,这里我写这篇文章记录配置方法,替后人省一把汗吧!我的开发环境:MSVC2010 + ...
- 教你做一个牛逼的DBA(在大数据下)
一.基本概念 大数据量下,搞mysql,以下概念需要先达成一致 1)单库,不多说了,就是一个库 2)分片(sharding),水平拆分,用于解决扩展性问题,按天拆分表 3)复制(replication ...
- Java动态规划
1. 介绍 动态规划典型的被用于优化递归算法,因为它们倾向于以指数的方式进行扩展.动态规划主要思想是将复杂问题(带有许多递归调用)分解为更小的子问题,然后将它们保存到内存中,这样我们就不必在每次使用它 ...
- 在.NET Core 3.0中的WPF中使用IOC图文教程
我们都知道.NET Core 3.0已经发布了第六个预览版,我们也知道.NET Core 3.0现在已经支持创建WPF项目了,刚好今天在写一个代码生成器的客户端的时候用到了WPF,所以就把WPF创建以 ...
- DNS查询命令
dig(domain information groper)是一个在类Unix命令行模式下查询DNS,包括NS记录,A记录,MX记录等相关信息的工具 一.简单介绍使用dig命令查询DNS的方法 dig ...
- centos安装最新版MySQL 8.0教程
这篇教程是通过yum方式安装的 安装依赖 yum install libaio wget -y 检查MYSQL是否已安装 yum list installed | grep mysql 如果有先卸载 ...
- 网关never_host设计
never下app的host与api Never是纯c#语言开发的一个框架.host则是使用该框架开发出来的API网关,它包括了:路由.认证.鉴权.熔断,内置了负载均衡器Deployment:并且只需 ...