从关系型库中迁移数据算是比较常见的场景,这里借助两个工具来完成本次的数据迁移,考虑到数据量并不大(不足两千万),未采用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版本的。
下面开始数据迁移数据。
#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
bin=${DIR}/../bin
lib=${DIR}/../lib
echo '
{
"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索引库中。
从官方的介绍中可以看到,大致分三个步骤:
# 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=analyzer
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=mapping
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=data
为提高脚本的执行效率,特殊关注下limit参数,数据批的大小,默认是100条,比较小的,这个需要根据具体的环境来调整,建议1000以上。脚本执行过程中会有日志输出,显示数据传输的进程。
实际操作时请结合自身的具体环境,希望能帮到你。