第一種方法 (使用elasticdump)
這是一個nodejs的插件,安裝方式直接使用 npm即可
導出索引的格式
#格式:elasticdump --input {protocol}://{host}:{port}/{index} --output ./test_index.json #例子:將ES中的test_index 中的索引導出 #導出當前索引的mapping結構 $ elasticdump --input http://192.168.56.104:9200/test_index --output ./test_index_mapping.json --type=mapping #導出當前索引下的所有真實數據 $ elasticdump --input http://192.168.56.104:9200/test_index --output ./test_index.json --type=data
向新的es服務導入索引
# 創建索引 $ curl -XPUT http:192.168.56.104:9200/test_index #因為導入的是mapping,所以設置type為mapping $ elasticdump --input ./test_index_mapping.json --output http://192.168.56.105:9200/ --type=mapping #因為導入的是data(真實數據)所以設置type為data $ elasticdump --input ./test_index.json --output http://192.168.56.105:9200/ --type=data
使用 elasticdump的官方docker鏡像進行數據的導入導出
# 鏡像下載 $ docker pull taskrabbit/elasticsearch-dump # 下面還是例子:通過鏡像導出數據到本地 # 創建一個文件夾用於保存導出數據 $ mkdir -p /root/data # 下面需要對路徑進行映射並執行命令(導出mapping) $ docker run --rm -ti -v /data:/tmp taskrabbit/elasticsearch-dump \ --input=http://production.es.com:9200/my_index \ --output=/tmp/my_index_mapping.json \ --type=mapping # 導出(data) $ docker run --rm -ti -v /root/data:/tmp taskrabbit/elasticsearch-dump \ --input=http://192.168.56.104:9200/test_index \ --output=/tmp/elasticdump_export.json \ --type=data ----------------------------------------------------------------------------- # 以下內容為ES -> ES的數據遷移例子 $ docker run --rm -ti taskrabbit/elasticsearch-dump \ --input=http://production.es.com:9200/my_index \ --output=http://staging.es.com:9200/my_index \ --type=mapping $ docker run --rm -ti taskrabbit/elasticsearch-dump \ --input=http://production.es.com:9200/my_index \ --output=http://staging.es.com:9200/my_index \ --type=data
注:上面的這些導入導出都是最基本的使用,當然還有很多高級用法,參考下面所列出來的命令進行嘗試或者直接訪問Github官網,查看更加詳細的說明,這里只作為記錄!
logstash系列一使用logstash遷移ES數據
es的文檔id生成方式可以是 自動的uuid,也可以是自定義的id,可以用業務中的id字段進行映射
自動的id,URL安全,base64編碼,GUID,如下:
POST /test_index/test_type { "test_content": "my test" }
手動的就靠自己定義
PUT /test_index/test_type/2 { "test_content": "my test" }
那么使用logstash抽取數據是怎么做映射的?配置文件如下:
input { elasticsearch { hosts => ["192.168.0.1:9200"] index => "ddd" query => '{ "query": {"match_all" : {} } }' size => 1000 scroll => "1m" codec => "json" docinfo => true } } output { stdout { codec => rubydebug } elasticsearch { hosts => ["192.168.0.2:9200"] document_type => "messages" document_id => "%{id}" index => "ddd" } }
document_id => "%{id}" 指定 文檔id 使用自己定義json 文件中的id 號映射。