【经验分享】PT(persistent table)表异常导致gprecoverseg全量恢复失败的探索

本文分享了一位中兴通讯的架构师在使用gp5.20时遇到的全量恢复失败问题,详细解析了由于持久化表(PT)数据不一致引发的内部错误,以及如何通过源码分析和更新PT表来解决问题。同时,讨论了PT表在Greenplum数据库中的作用和重要性。
摘要由CSDN通过智能技术生成

73fb7321-b931-460b-9e54-807a124126d8.jpg

 

了解更多Greenplum相关内容,欢迎访问Greenplum中文社区网站

背景

最近来自中兴通讯的系统架构师、敏捷教练王爱军在工作过程中,遇到gp5.20通过 gprecoverseg -F做全量恢复失败的异常。master和primary的pg_log日志中打印internal error,然后primary crash。本文分享问题的定位过程以及涉及到相关概念,供大家学习参考。

 

一、问题现象

 

1.1 集群状态查看

 

[gpadmin@instance-eqmn04jr pg_log]$ gpstate -s

 

8214e94d-7648-4b3d-ae4f-ef3f64c1e9ed.png

图1 Mirror Down

 

1.2 全量恢复

 

[gpadmin@instance-eqmn04jr pg_log]$ gprecoverseg -F

 

5125f619-e267-43dc-963c-c81ba68685fa.png

图2 gprecoverseg失败

要通过.frm文件恢复MySQL的结构,可以尝试以下方法: 1. 创建一个与.frm文件相关的新: - 将原始的.frm文件从备份或另一个MySQL实例中复制到目标服务器的MySQL数据目录中。 - 在MySQL命令行界面或客户端工具中,使用CREATE TABLE语句创建一个新,并指定.frm文件作为定义文件。例如: ``` CREATE TABLE `your_table_name` ( -- 列定义 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Table Comment' DATA DIRECTORY='your_data_directory' INDEX DIRECTORY='your_index_directory' TABLESPACE `your_tablespace_name` /*!50100 PARTITION BY RANGE () SUBPARTITION BY HASH () SUBPARTITIONS 1 (PARTITION your_partition_name VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */ /*!80016 SHARD_ROW_ID_BITS = 6 */ ; ``` - 替换`your_table_name`为您想要恢复名,并根据需要调整其他选项。 2. 执行SHOW TABLES语句验证新是否已成功创建。例如: ``` SHOW TABLES; ``` 请注意,这种方法只能恢复的结构,不包括数据和索引。如果您需要恢复完整的,包括数据和索引,请确保同时拥有相应的.ibd文件,并将其放置在正确的位置。 如果拥有相关的.ibd文件,可以尝试将它们放置在正确的数据目录中,并重启MySQL服务,以使MySQL能够识别和加载这些.ibd文件。然后,您可以尝试访问数据,或使用工具如mysqlfrm来从.ibd和.frm文件中恢复结构和数据。 在任何情况下,建议在进行任何恢复操作之前先进行备份,并参考MySQL官方文档、社区或寻求专业支持以获取更详细和针对性的帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值