消失的索引

案例:

   某一子公司数据库要迁移几个表到其他表空间,告诉新手DBA做好准备工作,先建立好表空间,预判要迁移的数据量大小,关注约束,联系客户停机等等,最重要的做好备份。

   一切按计划执行,完毕后,他告诉我,OK了,数据迁移完毕,过程中提示索引失效,但rebuild就好了,当时也没在意。那好吧,下班回家。结果在路上,子公司的人打电话过来,系统变得非常非常慢,慢的离谱。回到公司连接数据库,发现,迁移的表索引和主键全部丢失,百万纪录的表,系统不慢才怪。赶紧增加索引,系统恢复正常。查找索引对象表,看有没有异常,发现,丢失的索引都在system表空间下,疑惑中,再看属主,都在迁移表后缀名+bak的表中。询问那个新手DBA,我去,这兄弟听话,不但做了冷备,别出心裁的,把要迁移的表都rename成带bak后缀的表了。难怪。他疑惑,分析过程如下:

   1、rename表的时候,原表中所有的属性对象均还依附原表,并为做任何改变。只是系统表的表名发生变化。

   2、用exp迁移原表,原表中的索引和rename表的索引同名,导致索引失败,也就是他迁移时看到的内容。

   3、rebuild成功了,但rebuild的是rename表的内容,而不是迁移表的内容。

   4、因为要迁移到新的表空间,过程中,有quota 0on 原表空间的操作,所以,rebuild索引的结果是到了system表空间。

画蛇添足净捣乱。

### Elasticsearch 索引失的原因 索引可能因多种因素而失。常见的原因包括但不限于硬件故障、网络分区、配置错误以及集群状态不稳定等[^1]。 - **硬件故障**:磁盘损坏或其他存储设备问题可能导致数据永久性损失。 - **网络分区**:当节点之间的通信中断时,可能会导致部分分片不可用或被误认为已失败并触发重新分配过程。 - **配置错误**:不当的操作如删除索引命令执行失误也会造成索引的意外移除。 - **集群健康状况不佳**:如果主节点无法正常工作,则整个集群的状态会受到影响,进而影响到各个索引的安全性和可用性。 ### 恢复方法 针对上述情况,Elasticsearch 提供了几种不同的方式来进行索引分片的恢复: #### 自动恢复机制 一旦检测到某个分片变得不可用(例如由于节点崩溃),Elasticsearch 将尝试通过现有副本来自动重建缺失的部分。这通常发生在以下几种情况下之一: - 当一个节点离线后再次加入集群; - 如果有新的节点加入了集群并且有足够的资源来容纳额外的数据副本; 此过程中涉及的具体操作取决于当前环境下的条件和策略设定[^2]。 #### 手动干预措施 对于更复杂的情形或是希望加快恢复速度的情况,可以采取一些手动手段辅助处理: ##### 使用快照功能备份与还原 利用内置工具创建定期增量式的快照保存至外部介质上,在遇到灾难事件发生之后可以从最近一次完整的存档中快速拉起服务继续运行[^3]。 ```bash POST /_snapshot/my_backup/snapshot_1/_restore { "indices": "lost_index", "include_global_state": false, "rename_pattern": "index_(.+)", "rename_replacement": "restored_index_$1" } ``` 此处展示了如何定义一个简单的 JSON 请求体用于指定要恢复的目标索引名称以及其他选项参数。 ##### 调整高级设置优化性能表现 适当调整 `cluster.routing.allocation.*` 类别的参数可以帮助提高效率,比如允许跨数据中心同步或者限制特定类型的迁移活动范围等等[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值