Elasticsearch快照恢复与内部系统索引冲突问题咨询
问题解答
1. 如何列出所有内部系统索引
默认GET /_cat/indices不会显示以.开头的隐藏系统索引,执行以下命令可列出所有索引(包括系统索引和未加载索引):
GET /_cat/indices?v&include_unloaded_indices=true&expand_wildcards=all
若仅需查看系统索引,可直接匹配所有以.开头的索引:
GET /_cat/indices/.*/v
2. 创建快照时是否需要忽略系统索引
默认Elasticsearch快照会包含集群内所有索引(包括系统索引)。若无需备份系统索引,创建快照时可通过indices参数排除它们,示例如下:
执行创建快照的命令:
PUT /_snapshot/my_backup/%3Cmy_snapshot_%7Bnow%2Fd%7D%3E
同时携带请求体:
{ "indices": "*,-.*" }
其中*匹配所有普通索引,-.*排除所有以.开头的系统索引。若需精准排除特定系统索引(如仅排除ILM历史索引),可写成:
{ "indices": "*,-.ds-ilm-history-*" }
若已创建包含系统索引的快照,恢复时也可指定仅恢复普通索引避免冲突:
POST /_snapshot/my_backup/my_snapshot_2023.06.30/_restore
携带请求体:
{ "indices": "*,-.*" }
3. 是否可以删除所有内部及外部索引
可以,但Elasticsearch默认禁止使用_all或通配符批量删除所有索引,测试环境下可按以下两种方式操作:
方式1:批量指定索引删除
- 先列出所有索引(包括系统索引):
GET /_cat/indices?expand_wildcards=all&h=index
- 将返回的所有索引名用逗号分隔,执行删除命令:
DELETE /_index/index1,index2,.ds-ilm-history-5-2023.02.17-000001,...
方式2:修改配置启用通配符删除
- 修改Elasticsearch配置文件
elasticsearch.yml,添加或修改:
action.destructive_requires_name: false
- 重启Elasticsearch服务
- 执行命令删除所有索引:
DELETE /*
注意:此方式生产环境风险极高,但你有虚拟机备份,测试环境可放心操作。部分核心系统索引(如
.security)删除后可能导致集群功能异常,出现问题直接恢复虚拟机备份即可。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

