ElasticSearch-数据同步工具 elasticdump

官方链接

使用docker方式

# 将json文件导入本地es中(数据)
elasticdump --input=索引名称.data.json --output=http://localhost:9200/索引名称 --type=data  

# 导出mapping
docker run --rm -ti -v /root/tmp:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/索引名称 \
  --output=/tmp/索引名称.mapping.json \
  --type=mapping 
  
# 导出索引数据并压缩
docker run --rm -ti -v /devops/es_test:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/索引名称 \
  --type=data \
  --limit=10000 \
  --output=$ | gzip  > 索引名称.data.json.gz 

# 导出索引数据不压缩
docker run --rm -ti -v /root/tmp:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/索引名称 \
  --type=data \
  --limit=10000 \
  --output=/tmp/索引名称.json
  
# 导出所有索引数据
docker run --rm -ti -v /data/backup:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200 \
  --type=data \
  --limit=10000 \
  --output=/tmp/备份文件.json


# 导入索引结构
docker run --rm -ti -v /root/tmp:/tmp elasticdump/elasticsearch-dump \
  --input=/tmp/索引名称.mapping.json  \
  --output=http://es账号:es密码@es服务器地址:9200/索引名称 \
  --type=mapping  \
  --noRefresh \
  --maxSockets=500

# 导出索引数据,每次操作10000条数据
docker run --rm -ti -v /devops/es_test:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/索引名称 \
  --type=data \
  --limit=10000 \
  --output=/tmp/索引名称.json


docker run --rm -ti -v /data/es2:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/abroad_plg_account_info_v1 \
  --output=/tmp/abroad_plg_account_info_v1.mapping.json \
  --type=data  --noRefresh  --maxSockets=500 --limit=10000

docker run --rm -ti -v /data/es2:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/abroad_plg_account_info_v2 \
  --output=/tmp/abroad_plg_account_info_v2.mapping.json \
  --type=data  --noRefresh  --maxSockets=5000 --limit=10000


docker run --rm -ti -v /data/es2:/tmp elasticdump/elasticsearch-dump \
  --input=/tmp/abroad_plg_account_info_v2.mapping.json  \
  --output=http://es账号:es密码@es服务器地址:9200/abroad_plg_account_info_v2 \
  --type=data  \
  --noRefresh \
  --maxSockets=500 --limit=10000
  
docker run --rm -ti -v /data/es2:/tmp elasticdump/elasticsearch-dump \
  --input=/tmp/abroad_plg_account_info_v1.mapping.json  \
  --output=http://es账号:es密码@es服务器地址:9200/abroad_plg_account_info_v1 \
  --type=data  \
  --noRefresh \
  --maxSockets=500 --limit=10000

参数说明

elasticdump: Elasticsearch的导入和导出工具  
版本: %%version%%  
  
用法: elasticdump --input 源 --output 目标 [选项]  
  
核心选项  
--------------------  
--input  
                    源位置 (必须)  
  
--input-index  
                    源索引和类型  
                    (默认: 全部, 示例: index/type)  
  
--output  
                    目标位置 (必须)  
  
--output-index  
                    目标索引和类型  
                    (默认: 全部, 示例: index/type)  
  
  
选项  
--------------------  
--big-int-fields  
                    指定一个应检查大整数支持的字段的逗号分隔列表  
                    (默认 '')  
  
--bulkAction  
                    设置准备发送到elasticsearch的请求体时使用的操作类型。  
                    更多信息 - https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html  
                    (默认: index, 选项: [index, update, delete, create)  
  
--ca, --input-ca, --output-ca  
                    CA证书。如果源和目标相同,使用 --ca。  
                    否则,根据需要使用前缀为 --input 或 --output 的一个。  
  
--cert, --input-cert, --output-cert  
                    客户端证书文件。如果源和目标相同,使用 --cert。  
                    否则,根据需要使用前缀为 --input 或 --output 的一个。  
  
--csvConfigs  
                    设置所有fast-csv配置  
                    可以提供一个转义的JSON字符串或文件。文件位置必须用@符号作为前缀  
                    (默认: null)  
  
--csvCustomHeaders  一个用逗号分隔的值列表,将作为数据的头。此参数必须与`csvRenameHeaders`一起使用  
                    (默认 : null)  
  
--csvDelimiter  
                    将分隔列的分隔符。  
                    (默认 : ',')  
  
--csvFirstRowAsHeaders  
                    如果设置为true,第一行将被视为标题。  
                    (默认 : true)  
  
--csvHandleNestedData  
                    设置为true以处理嵌套的JSON/CSV数据。  
                    注意:这是一个非常主观的实现!  
                    (默认 : false)  
  
--csvIdColumn  
                    用于从中提取记录标识符(id)的列名  
                    在导出到CSV时,此列可以用来覆盖默认的id (@id)列名  
                    (默认 : null)  
  
--csvIgnoreAutoColumns  
                    设置为true以防止以下列 @id, @index, @type 被写入到输出文件  
                    (默认 : false)  
  
--csvIgnoreEmpty  
                    设置为true以忽略空行。  
                    (默认 : false)  
  
--csvIncludeEndRowDelimiter  
                    设置为true以在csv的末尾包含行分隔符  
                    (默认 : false)  
  
--csvIndexColumn  
                    用于从中提取记录索引的列名  
                    在导出到CSV时,此列可以用来覆盖默认的索引 (@index)列名  
                    (默认 : null)  
  
--csvLTrim  
                    设置为true以左修剪所有列。  
                    (默认 : false)  
  
--csvMaxRows  
                    如果数字> 0,则只解析指定数量的行。(例如,100将返回数据的前100行)  
                    (默认 : 0)  
  
--csvRTrim  
                    设置为true以右修剪所有列。  
                    (默认 : false)  
  
--csvRenameHeaders  
                    如果您希望文件的第一行被`csvCustomHeaders`选项中提供的内容删除并替换  
                    (默认 : true)  
  
--csvSkipLines  
                    如果数字> 0,将跳过指定数量的行。  
                    (默认 : 0)  
  
--csvSkipRows  
                    如果数字> 0,则跳过指定数量的已解析行  
                    注意:(如果第一行被视为标题,它们不是计数的一部分)  
                    (默认 : 0)  
  
--csvTrim  
                    设置为true以从列中去除所有空格。  
                    (默认 : false)  
  
--csvTypeColumn  
                    用于从中提取记录类型的列名  
                    在导出到CSV时,此列可以用来覆盖默认类型 (@type)列名  
                    (默认 : null)  
  
--csvWriteHeaders   决定是否应将标题写入csv文件。  
                    (默认 : true)  
  
--customBackoff  
                    激活自定义customBackoff函数。 (s3)  
  
--debug  
                    显示正在使用的elasticsearch命令  
                    (默认: false)  
  
--delete  
                    在移动时逐个删除输入中的文档。不会删除源索引  
                    (默认: false)  
  
--delete-with-routing  
                    将路由查询参数传递给删除功能  
                    用于将操作路由到特定的分片。  
                    (默认: false)  
  
--esCompress  
                    如果为true,添加一个Accept-Encoding头以从服务器请求压缩的内容编码(如果尚未存在)  
                    并在响应中解码支持的内容编码。  
                    注意:响应内容的自动解码是在通过请求返回的主体数据上执行的  
                    (无论是通过请求流还是传递给回调函数),但不在响应流上执行  
                    (可从响应事件获得),这是未经修改的http.IncomingMessage对象,可能包含压缩数据。  
                    见下面的例子。  
  
--fileSize  
                    支持文件分割。此值必须是**字节**模块支持的字符串。  
                    以下缩写必须用来表示单位大小  
                    b代表字节  
                    kb代表千字节  
                    mb代表兆字节  
                    gb代表吉字节  
                    tb代表太字节  
                    例如:10mb / 1gb / 1tb  
                    分区有助于通过有效地将文件切成更小的块来缓解溢出/内存不足的异常,  
                    然后可以根据需要合并这些块。  
  
--filterSystemTemplates  
                    是否删除metrics-*-* 和 logs-*-* 系统模板  
                    (默认: true])  
  
--force-os-version  
                    强制elasticsearch-dump使用的OpenSearch版本。  
                    (默认: 7.10.2)  
  
--fsCompress  
                    在发送输出到文件之前压缩数据。  
                    在导入时,该命令用于解压缩gzipped文件  
  
--handleVersion  
                    告诉elastisearch传输如果数据集中存在`_version`字段则处理它  
                    (默认 : false)  
  
--headers  
                    添加到Elastisearch请求的自定义头(当  
                    你的Elasticsearch实例位于代理后面时很有用)  
                    (默认: '{"User-Agent": "elasticdump"}')  
                    支持基于类型/方向的头,例如。input-headers/output-headers  
                    (这些将仅根据当前的流类型input/output添加)  
  
--help  
                    这个页面  
  
--ignore-errors  
                    在写入错误时将继续读/写循环  
                    (默认: false)  
  
--ignore-es-write-errors  
                    在elasticsearch写入错误时将继续读/写循环  
                    (默认: true)  
  
--inputSocksPort, --outputSocksPort  
                    Socks5主机端口  
  
--inputSocksProxy, --outputSocksProxy  
                    Socks5主机地址  
  
--inputTransport  
                    提供一个自定义的js文件作为输入传输  
  
--key, --input-key, --output-key  
                    私钥文件。如果源和目标相同,使用 --key。  
                    否则,根据需要使用前缀为 --input 或 --output 的一个。  
  
--limit  
                    每次操作移动多少个对象  
                    对于文件流,限制是大约的  
                    (默认: 100)  
  
--maxRows  
                    支持文件分割。文件是按指定的行数分割的  
  
--maxSockets  
                    进程可以同时进行多少个HTTP请求?  
                    (默认:  
                      5 [node <= v0.10.x] /  
                      无限制 [node >= v0.11.x] )  
  
--noRefresh  
                    禁用输入索引刷新。  
                    正面:  
                      1. 索引速度大大提高  
                      2. 对硬件的要求大大降低  
                    负面:  
                      1. 最近添加的数据可能没有被索引  
                    推荐在对大数据进行索引时使用,  
                    其中速度和系统健康是比最近添加的数据更高的优先级。  
  
--offset  
                    包含你希望从输入传输跳过的行数的整数。当导入大量  
                    索引时,事情可能会出错,无论是连通性,崩溃,  
                    有人忘记`screen`等。这允许你  
                    从最后一行已知的行重新开始转储  
                    (由输出中的`offset`记录)。请注意  
                    由于在最初创建转储时没有指定排序,因此没有真正的方式来  
                    保证已经跳过的行已经被  
                    写入/解析。这更多的是一个选项,当你  
                    想要在索引中获取尽可能多的数据时,而不关心在过程中可能丢失一些行,  
                    类似于`timeout`选项。  
                    (默认: 0)  
  
--outputTransport  
                    提供一个自定义的js文件作为输出传输  
  
--overwrite  
                    如果存在则覆盖输出文件  
                    (默认: false)  
  
--params  
                    添加自定义参数到Elastisearch请求uri。当你例如  
                    想要使用elasticsearch preference时很有用  
                    --input-params是一个特定的参数扩展,可以在使用滚动api获取数据时使用  
                    --output-params是一个特定的参数扩展,可以在使用批量索引api索引数据时使用  
                    注意:这些是为了避免参数污染问题,这些问题发生在输入参数在输出源中使用时  
                    (默认: null)  
  
--parseExtraFields  
                    要解析的元字段的逗号分隔列表  
  
--pass, --input-pass, --output-pass  
                    私钥的通行证。如果源和目标相同,使用 --pass。  
                    否则,根据需要使用前缀为 --input 或 --output 的一个。  
  
--quiet  
                    除错误外,禁止所有消息  
                    (默认: false)  
  
--retryAttempts  
                    指示当连接因以下错误失败时,请求应自动重试的次数`ECONNRESET`, `ENOTFOUND`, `ESOCKETTIMEDOUT`,  
                    ETIMEDOUT`, `ECONNREFUSED`, `EHOSTUNREACH`, `EPIPE`, `EAI_AGAIN`  
                    (默认: 0)  
  
--retryDelay  
                    指示重试尝试之间的回退/休息期(毫秒)  
                    (默认 : 5000)  
  
--retryDelayBase  
                    用于操作重试的指数回退的基本毫秒数。(s3)  
  
--scroll-with-post  
                    使用HTTP POST方法进行滚动,而不是默认的GET  
                    (默认: false)  
  
--scrollId  
                    从elasticsearch返回的最后一个滚动Id。  
                    这将允许使用最后的滚动Id恢复转储 &  
                    `scrollTime` 尚未过期。  
  
--scrollTime  
                    节点将按顺序保持请求的时间。  
                    (默认: 10m)  
  
--searchBody  
                    根据搜索结果执行部分提取  
                    当ES是输入时,默认值是  
                      如果 ES > 5  
                        `'{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'`  
                      否则  
                        `'{"query": { "match_all": {} }, "fields": ["*"], "_source": true }'`  
                    [从6.68.0开始] 如果searchBody前面有一个@符号,elasticdump将在指定的位置执行文件查找  
                    注意:文件必须包含有效的JSON  
  
--searchBodyTemplate  
                    可以调用的方法/函数来搜索主体  
                        doc.searchBody = { query: { match_all: {} }, stored_fields: [], _source: true };  
                    可以多次使用。  
                    此外,searchBodyTemplate可以由模块执行。参见下面的[searchBody模板](#search-template)。  
  
--searchWithTemplate  
                    使用 --searchBody 时启用搜索模板  
                    如果使用搜索模板,则searchBody必须包含"id"字段和"params"对象  
                    如果搜索模板中定义了"size"字段,它将被 --size 参数覆盖  
                    有关  
                    进一步的信息请参见 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html   
                    (默认: false)  
  
--size  
                    要检索多少对象  
                    (默认: -1 -> 无限制)  
  
--skip-existing  
                    当启用时,跳过resource_already_exists_exception并退出成功  
                    (默认: false)  
  
--sourceOnly  
                    只输出文档_source中包含的json  
                    正常: {"_index":"","_type":"","_id":"", "_source":{SOURCE}}  
                    sourceOnly: {SOURCE}  
                    (默认: false)  
  
--support-big-int  
                    支持大整数  
  
--templateRegex  
                    在传递给输出传输之前过滤模板的正则表达式  
                    (默认: ((metrics|logs|\..+)(-.+)?)  
  
--timeout  
                    包含等待  
                    请求响应的毫秒数,在请求超时前中止请求。直接传递  
                    到请求库。主要用于当你不太在乎导入时是否丢失一些数据  
                    但更希望有速度。  
  
--tlsAuth  
                    启用TLS X509客户端认证  
  
--toLog  
                    当使用自定义outputTransport时,应该将日志行  
                    附加到输出流?  
                    (默认: true, 除了 `$`)  
  
--transform  
                    可以调用的方法/函数,用于在写入目标之前修改文档。全局变量 'doc'  
                    是可用的。  
                    用于计算新字段 'f2' 作为字段 'f1' 的双倍值的示例脚本:  
                        doc._source["f2"] = doc._source.f1 * 2;  
                    可以多次使用。  
                    此外,transform可以由模块执行。参见下面的[模块转换](#module-transform)。  
  
--type  
                    我们要导出什么?  
                    (默认: data, 选项: [index, settings, analyzer, data, mapping, policy, alias, template, component_template, index_template])  
  
--versionType  
                    Elasticsearch版本类型。应为`internal`, `external`, `external_gte`, `force`。  
                    注意:类型验证由批量端点处理,而不是由elasticsearch-dump处理  
  
  
AWS特定选项  
--------------------  
--awsAccessKeyId 和 --awsSecretAccessKey  
                    当使用由  
                    AWS身份和访问管理 (IAM) 保护的Amazon Elasticsearch Service时,提供  
                    你的访问密钥ID和秘密访问密钥。  
                    --sessionToken也可以提供,如果使用临时凭证  
  
--awsChain  
                    使用[标准](https://aws.amazon.com/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/)  
                    位置和排序来解析凭证,包括环境变量,  
                    配置文件,EC2和ECS元数据位置 _推荐使用AWS的此选项_  
  
--awsIniFileName  
                    当使用 --awsIniFileProfile 时,覆盖默认的aws ini文件名  
                    文件名相对于 ~/.aws/  
                    (默认: config)  
  
--awsIniFileProfile  
                    替代 --awsAccessKeyId 和 --awsSecretAccessKey,  
                    从aws ini文件的指定配置文件中加载凭证。  
                    对于更大的灵活性,考虑使用 --awsChain  
                    并设置AWS_PROFILE和AWS_CONFIG_FILE  
                    环境变量以在需要时覆盖默认值  
  
--awsRegion  
                    设置将为其生成签名的AWS区域  
                    (默认: 从主机名或主机计算)  
  
--awsService  
                    设置将为其生成签名的AWS服务  
                    (默认: 从主机名或主机计算)  
  
--awsUrlRegex  
                    覆盖用于验证应签名的AWS url的默认正则表达式  
                    (默认: ^https?:\/\/.*\.amazonaws\.com.*$)  
  
--s3ACL  
                    S3 ACL: private | public-read | public-read-write | authenticated-read | aws-exec-read |  
                    bucket-owner-read | bucket-owner-full-control [默认 private]  
  
--s3AccessKeyId  
                    AWS访问密钥ID  
  
--s3Compress  
                    在发送到s3之前gzip数据  
  
--s3Configs  
                    设置所有s3构造函数配置  
                    可以提供一个转义的JSON字符串或文件。文件位置必须用@符号作为前缀  
                    (默认: null)  
  
--s3Endpoint  
                    AWS端点,可用于AWS兼容的后端,如  
                    OpenStack Swift 和 OpenStack Ceph  
  
--s3ForcePathStyle  
                    强制使用S3对象的路径样式URL [默认 false]  
  
--s3Options  
                    设置所有显示的s3参数在此 https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createMultipartUpload-property  
                    可以提供一个转义的JSON字符串或文件。文件位置必须用@符号作为前缀  
                    (默认: null)  
  
--s3Region  
                    AWS区域  
  
--s3SSEKMSKeyId  
                    用于aws:kms上传的KMS Id  
  
--s3SSLEnabled  
                    使用SSL连接到AWS [默认 true]  
  
--s3SecretAccessKey  
                    AWS秘密访问密钥  
  
--s3ServerSideEncryption  
                    启用加密上传  
  
--s3StorageClass  
                    设置用于s3的存储类  
                    (默认: STANDARD)