es 数据 导出 到 MySQL

暂时没有找到直接 导出到 mysql 数据库的工具 或者项目

 

目前实现思路: 使用 elasticdump  工具 实现 从 es 数据 导出到 json 文件 ,然后 使用 脚本程序 操作 改 json 文件 实现 导入到MySQL 数据

具体内容如下:

安装elasticdump
 1 npm install elasticdump -g elasticdump 全局安装
 2 从 github 下载 对应的版本  比如 2.4.*  

 具体参考 https://www.npmjs.com/package/elasticdump
  github 地址 https://github.com/taskrabbit/elasticsearch-dump


安装完成后,就可以使用了,下面举一个例子(将索引a中的数据导入到索引b中):
elasticdump  用法详解

./elasticdump --input=http://127.0.0.1:9200/domain6 --output=query.json --debug=true --limit=1 --offset=0 --searchBody='{"query":{"range":{"id":{"lte":"100"}}}}' --sourceOnly=true

// 获取 所需的字段值
./elasticdump --input=http://127.0.0.1:9200/domain6 --output=query2.json --limit=100 --offset=0 --searchBody='{"query":{"range":{"id":{"lte":"80"}}},"_source":["id","cname"]}' --sourceOnly=true

//问题 类似 es  size 的功能 暂时还没找到方案  
./elasticdump --input=http://127.0.0.1:9200/domain6 --output=query3.json --limit=100 --offset=0 --searchBody='{"query":{"range":{"id":{"lte":"80"}}},"_source":["id","cname"]}' --sourceOnly=true

--input 原数据源
--output 导出数据地址
--limit (不是导出总条数 和 es 有区别) 每次执行 导入的数据条数
--offset  相当于 es 里面 的from
--searchBody  查询语句
--sourceOnly  导出数据格式 默认会把 _type _id _source _index 都导出 默认 false

elasticdump --input=http://localhost:9200/a --output=http://localhost:9200/b --type=data
elasticdump --input=http://localhost:9200/domain_v12 --output=D:/ziliao/elasticsearch-2.3.3/dd --type=data
elasticdump --input=http://localhost:9200/domain_v12 --limit=10 --output=D:/ziliao/elasticsearch-2.3.3/dd4.json  --type=data

执行数据迁移
导出Mapping信息
elasticdump --ignore-errors=true  --scrollTime=120m  --bulk=true --input=http://10.10.20.164:9200/xmonitor-2015.04.29   --output=http://192.168.100.72:9200/xmonitor-prd-2015.04.29  --type=mapping
导出数据
elasticdump --ignore-errors=true  --scrollTime=120m  --bulk=true --input=http://10.10.20.164:9200/xmonitor-2015.04.28   --output=/usr/local/esdump/node-v0.12.2-linux-x64/data/xmonitor-prd-2015.04.28.json --type=data
导出数据到本地集群
elasticdump --ignore-errors=true  --scrollTime=120m  --bulk=true --input=http://10.10.20.164:9200/xmonitor-2015.04.29   --output=http://192.168.100.72:9200/xmonitor-prd-2015.04.29 --type=data

var defaults = {
  limit:              10,
  offset:             0,
  debug:              false,
  type:               'data',
  delete:             false,
  maxSockets:         null,
  input:              null,
  'input-index':      null,
  output:             null,
  'output-index':     null,
  inputTransport:     null,
  outputTransport:    null,
  searchBody:         null,
  sourceOnly:         false,
  jsonLines:          false,
  format:             '',
  'ignore-errors':    false,
  scrollTime:         '10m',
  timeout:            null,
  toLog:              null,
  quiet:              false,
  awsAccessKeyId:     null,
  awsSecretAccessKey: null,
};
npm install elasticdump2.1.0 -g
elasticdump

npm install elasticdump@2.*

从json文件  导入 MySQL
<?php 
$json_data = file_get_contents('D:/ziliao/node_modules/elasticdump/bin/query1223.json');(json 文件 所有路径)
$len = strlen($json_data);
$begin = 0;
$end = 0;
$data = [];
for ($i=0; $i < $len; $i++) { 
  if($json_data[$i]=="}")
  { 
    $end = $i;
    $lens = $end-$begin+1;
    $data[] = json_decode(substr($json_data,$begin ,$lens),true);
    $begin = $end+1;
  }
}
// print_r($data);
// 链接 MySQL 数据库 配置 
$con = mysql_connect("localhost","root","");
if (!$con)
{
  die('Could not connect: ' . mysql_error());
}
mysql_select_db("adbug", $con);
foreach ($data as $key => $value) {
  $sql = "INSERT INTO test2 (name) VALUES ('".$value['host']."')";
  mysql_query($sql);
}
mysql_close($con);
?> 

posted on 2018-06-19 10:48  风声风语  阅读(1311)  评论(0编辑  收藏  举报

导航