通過elasticsearch-dump工具,您可以將阿里云Elasticsearch實例索引的settings、mapping、data等數據遷移至本地或者其他阿里云實例上。本文介紹如何安裝與使用elasticsearch-dump工具。
背景信息
elasticsearch-dump是一個開源的Elasticsearch數據遷移工具,詳細信息請參見elasticsearch-dump官方文檔。
前提條件
已創建阿里云Elasticsearch實例,具體操作請參見創建阿里云Elasticsearch實例。
已開啟目標端阿里云Elasticsearch實例的自動創建索引功能,或提前創建對應索引。開啟自動創建索引功能的具體操作,請參見配置YML參數。
已創建ECS服務器,該ECS用來安裝elasticsearch-dump工具。具體操作,請參見自定義購買實例。
適用場景
elasticsearch-dump工具適用于數據量較小,索引數量不多的遷移場景。
安裝elasticsearch-dump工具
連接ECS服務器。
具體操作請參見通過密碼或密鑰認證登錄Linux實例。
安裝node.js。
下載安裝包。
wget https://nodejs.org/dist/v16.18.0/node-v16.18.0-linux-x64.tar.xz
解壓。
tar -xf node-v16.18.0-linux-x64.tar.xz
設置環境變量。
臨時生效
export PATH=$PATH:/root/node-v16.18.0-linux-x64/bin/
永久生效
vim ~/.bash_profile export PATH=$PATH:/root/node-v16.18.0-linux-x64/bin/ source ~/.bash_profile
安裝elasticsearch-dump。
npm install elasticdump -g
使用示例
如果密碼中存在特殊符號(如 #
、$
等),發送請求時網絡會被阿里云Web應用防火墻(WAF)攔截,相應的本地執行命令也會報錯。詳細報錯和處理方法,請參見常見問題。
遷移數據到阿里云實例
遷移指定索引的settings
elasticdump --input=http://"<UserName>:<YourPassword>"@<YourEsHost>/<YourEsIndex> --output=http://"<OtherName>:<OtherPassword>"@<OtherEsHost>/<OtherEsIndex> --type=settings
遷移指定索引的mapping
elasticdump --input=http://"<UserName>:<YourPassword>"@<YourEsHost>/<YourEsIndex> --output=http://"<OtherName>:<OtherPassword>"@<OtherEsHost>/<OtherEsIndex> --type=mapping
遷移指定索引的data
elasticdump --input=http://"<UserName>:<YourPassword>"@<YourEsHost>/<YourEsIndex> --output=http://"<OtherName>:<OtherPassword>"@<OtherEsHost>/<OtherEsIndex> --type=data
遷移數據到本地
遷移指定索引的settings
elasticdump --input=http://"<UserName>:<YourPassword>"@<YourEsHost>/<YourEsIndex> --output=<YourLocalFile> --type=settings
遷移指定索引的mapping
elasticdump --input=http://"<UserName>:<YourPassword>"@<YourEsHost>/<YourEsIndex> --output=<YourLocalFile> --type=mapping
遷移指定索引的data
elasticdump --input=http://"<UserName>:<YourPassword>"@<YourEsHost>/<YourEsIndex> --output=<YourLocalFile> --type=data
通過query遷移數據
elasticdump --input=http://"<UserName>:<YourPassword>"@<YourEsHost>/<YourEsIndex> --output=<YourLocalFile> ----searchBody="<YourQuery>"
恢復本地數據到阿里云實例
恢復本地data數據到阿里云實例:
elasticdump --input=<YourLocalFile> --output=http://"<UserName>:<YourPassword>"@<YourEsHost>/<YourEsIndex> --type=data
如果您有其他的數據遷移需求,請參見elasticsearch-dump官方文檔。
使用上述示例時,需要將以下字段替換為對應的值。
參數 | 說明 |
<YourEsHost>/<OtherEsHost> | 源或目標阿里云Elasticsearch實例的私網或公網訪問地址,可在實例的基本信息頁面獲取,獲取方法請參見查看實例的基本信息。 說明 如果安裝elasticsearch-dump工具的服務器與源和目標阿里云Elasticsearch均在同一VPC下,可使用私網訪問地址;如果不在同一VPC下,需要使用公網訪問地址,且需要配置公網訪問白名單,詳細信息請參見配置實例公網或私網訪問白名單。 |
<UserName>/<OtherName> | 源或目標阿里云Elasticsearch實例的訪問用戶名,默認為elastic。 |
<YourPassword>/<OtherPassword> | 源或目標阿里云Elasticsearch實例的訪問密碼。elastic用戶的密碼在創建實例時設定,如果忘記可進行重置,重置密碼的注意事項和操作步驟請參見重置實例訪問密碼。 |
<YourEsIndex>/<OtherEsIndex> | 源或目標索引名稱。 |
<YourLocalFile> | 本地文件路徑。例如: 重要 將數據遷移至本地時,同一目錄中不能存在目標文件,elasticsearch-dump工具會自動生成對應文件。 |
<YourQuery> | 查詢語句。示例: |
常見問題
Q:遇到報錯Error: getaddrinfo ENOTFOUND elastic
,怎么處理?
A:產生這個報錯的原因是,HTTP認證密碼包含特殊字符導致URL解析異常,解決辦法是添加HTTP認證文件。
認證文件
auth.ini
中寫入Elasticsearch實例的訪問用戶名和訪問密碼。示例如下:user=elastic password="Es#123456"
說明password需要添加半角雙引號("")。
執行如下命令,通過參數
--httpAuthFile
指定HTTP認證文件。elasticdump --input=http://es-*****.public.elasticsearch.aliyuncs.com:9200/customers --output=/root/customers.json --httpAuthFile=/root/auth.ini --type=settings
Q:遇到報錯URIError: URI malformed
,怎么處理?
A:elasticsearch-dump插件無法解析特殊字符的用戶名和密碼,如果您的用戶名或密碼中包含特殊符號,可能遇到以上報錯。處理方法:
方法一:修改用戶名或密碼,將用戶名或密碼中的特殊符號去掉。
方法二:登錄Kibana創建一個新的用戶,為新用戶配置所需權限后,用新用戶進行遷移。