开源PolarDB-X:单节点误删除binlog恢复

简介: 本文由邵亚鹏撰写,分享了在使用开源PolarDB-X过程中,因误删binlog导致数据库服务无法启动的问题及恢复过程。作者结合实践经验,详细介绍了在无备份情况下如何通过单节点恢复机制重启数据库,并提出了避免类似问题的几点建议,包括采用高可用部署、定期备份及升级至最新版本等。

作者介绍:邵亚鹏,中电万维信息技术有限责任公司技术专家,7年Java研发经验,两年AI大模型从事经验。

问题背景

某临时业务使用开源PolarDB-X(开源版本:PolarDB-X 2.4.0),采用集中式单节点部署。 因服务器磁盘满导致数据库服务器不可用,收到告警后尝试通过删除binlog文件恢复,但删除binlog后重启数据库服务,启动异常并报错:xpaxos init last index of trem for recovery failed

后经了解到:由于paxos对binlog完整性有严格检查,删除binlog文件会直接导致服务启动失败。

尝试解决

由于是单节点部署,没有其他节点冗余替换,同时由于没有进行过全量数据备份和增量日志备份,所以也没有办法通过备份集进行恢复。只能尝试基于现有只有数据的单节点实例进行恢复。

了解到 PolarDB-X《PolarDB-X 开源用户手册 ~ 基于Paxos的MySQL三副本》中支持恢复成单节点实例,而当前现状(只有数据没有binlog)又与恢复单节点的前置条件相似,所以尝试使用单节点恢复方式解决。

第一步:删除binlog文件

为了避免有新的binlog生成影响操作,操作前再次执行下binlog清理:

rm -f data/mysql-binlog.*

第二步:指定元数据刷新

由于当前现状不是来自备份集,所以不知道准确的commit index,所以尝试使用不同的index试探。

需要注意 cluster-start-index和 cluster-force-recover-index 值必须相同,且尽量设置大一点,比如1234567890,如果设置太小,会在执行的过程中卡在第三步中执行不下去,需要调大一个量级【重新回到第一步】再执行一遍。

/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf \
--cluster-id=1234 \
--cluster-info='127.0.0.1:14886@1' \
--cluster-force-single-mode=ON \
--cluster-force-change-meta=ON \
--cluster-start-index=1234567890 \
--cluster-force-recover-index=1234567890 \
--loose_consensus_reset_mts_info=ON \
&

第三步:单节点启动等待元数据刷新

执行节点启动

/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf &

执行以下命令查看日志

tail -f log/alert.log

第三步如果执行到下图中的位置不再往下执行,则说明两个index的值太小,调整index为更大点的值,【重新回到第一步】开始执行

第三步如果执行到如下图日志,获取rli consensus index的值45,作为重新订正启动命令中cluster-start-indexcluster-force-recover-index参数的值,然后【重新回到第一步】执行全部步骤

如果日志中出现“ConsensusLogManager::wait_follower_upgraded finish” 说明订正的index是正好满足的,继续执行第四步

第四步:kill mysqld进程

ps -ef | grep mysqldkill -15 pid  
或者 
kill -9 pid

第五步:以mysqld_safe方式单节点启动

/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf &

注意事项

1、第一步,第二步,第三步根据执行情况可能重复执行,必须是按照完整步骤执行,否则会导致启动失败

2、my.cnf文件中配置的basedir = /opt/polardbx_engine是安装路径,默认就是这个路径

PolarDB-X 总结

原理说明:Binlog删除后数据库无法登录,采用恢复单节点的方式需要指定数据文件当前index。但此刻内核无法知道日志应用到哪个位点, 所以需要先指定一个足够大的index值,例如1234567890。 然后根据启动会失败日志中“rli consensus index值”知道准确位点,用rli consensus index的值,在第二步订正meta信息时使用,强制单节点拉起节点。

事后规避:

  • 为避免单节点误删binlog事故,建议使用开源PolarDB-X标准版时,采用高可用三节点的方式部署, 这样至少一个节点故障可以自动HA到另外一个健康的节点
  • 定期对数据库进行全量数据备份和日志备份,然后定期清理历史日志文件。这样至少有一个兜底的数据在,同时提前避免磁盘满风险
  • 及时升级到PolarDB-X开源的最新版本,最新版本对这种问题的解决方式会更加丰富和快捷。

参考

相关文章
|
2月前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2开源发布,重点完善生态能力:新增客户端驱动、开源polardbx-proxy组件,支持读写分离与高可用;强化DDL变更、扩缩容等运维能力,并兼容MySQL主备复制及MCP AI生态。
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
2月前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2发布,新增开源Proxy组件与客户端驱动,支持读写分离、无感高可用切换及DDL在线变更,兼容MySQL生态,提升千亿级大表运维稳定性。
743 24
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
10月前
|
存储 NoSQL 关系型数据库
PolarDB开源数据库进阶课17 集成数据湖功能
本文介绍了如何在PolarDB数据库中接入pg_duckdb、pg_mooncake插件以支持数据湖功能, 可以读写对象存储的远程数据, 支持csv, parquet等格式, 支持delta等框架, 并显著提升OLAP性能。
761 2
|
10月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课15 集成DeepSeek等大模型
本文介绍了如何在PolarDB数据库中接入私有化大模型服务,以实现多种应用场景。实验环境依赖于Docker容器中的loop设备模拟共享存储,具体搭建方法可参考相关系列文章。文中详细描述了部署ollama服务、编译并安装http和openai插件的过程,并通过示例展示了如何使用这些插件调用大模型API进行文本分析和情感分类等任务。此外,还探讨了如何设计表结构及触发器函数自动处理客户反馈数据,以及生成满足需求的SQL查询语句。最后对比了不同模型的回答效果,展示了deepseek-r1模型的优势。
582 3
|
10月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课14 纯享单机版
PolarDB不仅支持基于“共享存储+多计算节点”的集群版,还提供类似开源PostgreSQL的单机版。单机版部署简单,适合大多数应用场景,并可直接使用PostgreSQL生态插件。通过Docker容器、Git克隆代码、编译软件等步骤,即可完成PolarDB单机版的安装与配置。具体操作包括启动容器、进入容器、克隆代码、编译软件、初始化实例、配置参数及启动数据库。此外,还有多个相关教程和视频链接供参考,帮助用户更好地理解和使用PolarDB单机版。
605 1
|
10月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课13 单机版转换为集群版
本文介绍如何将“本地存储实例”转换为“共享存储实例”,依赖于先前搭建的实验环境。主要步骤包括:准备PFS二进制文件、格式化共享盘为pfs文件系统、启动pfsd服务、停库并拷贝数据到pfs内、修改配置文件,最后启动实例。通过这些操作,成功实现了从本地存储到共享存储的转换,并验证了新实例的功能。相关系列文章和视频链接提供了更多背景信息和技术细节。
283 0
|
7月前
|
供应链 关系型数据库 分布式数据库
2025开源之夏火热报名|一起来设计PolarDB Dashboard
2025开源之夏正在火热报名中,PolarDB邀请全球学子参与云原生与Web开发的前沿项目。活动由中国科学院软件研究所发起,旨在鼓励高校学生通过实际开发维护开源软件,培养优秀开发者,推动开源生态发展。PolarDB项目聚焦设计与开发PolarDB-X Dashboard,要求掌握K8S Client-go和Web开发技术。参与者将根据项目难度获得税前8000至12000元人民币报酬,并获取结项证书。每位学生仅可申请一个项目,详情见官网。
2025开源之夏火热报名|一起来设计PolarDB Dashboard
|
7月前
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
415 4
|
7月前
|
SQL 关系型数据库 分布式数据库
PolarDB开源数据库入门教程
PolarDB是阿里云推出的云原生数据库,基于PostgreSQL、MySQL和Oracle引擎构建,具备高性能、高扩展性和高可用性。其开源版采用计算与存储分离架构,支持快速弹性扩展和100%兼容PostgreSQL/MySQL。本文介绍了PolarDB的安装方法(Docker部署或源码编译)、基本使用(连接数据库、创建表等)及高级特性(计算节点扩展、存储自动扩容、并行查询等)。同时提供了性能优化建议和监控维护方法,帮助用户在生产环境中高效使用PolarDB。
2516 21
|
存储 关系型数据库 MySQL
开源PolarDB- X|替换Opengemini时序数据场景下产品力校验
本文作者:黄周霖,数据库技术专家,就职于南京北路智控股份有限公司,负责数据库运维及大数据开发。

相关产品

  • 云原生分布式数据库 PolarDB-X
  • 云原生数据库 PolarDB