磐维数据库误删xlog影响与实例恢复

2024年 7月 9日 39.8k 0

概述

WAL日志(Write Ahead Log),意为预写式日志,特点是先记后做(类似于mysql种的redo日志),也被称作xlog日志,默认存放于数据目录的pg_xlog文件夹下:$PGDATA/pg_xlog,该日志的重要性不言而喻。在磐维数据库中,参数wal_keep_segments控制了正常情况下保留的xlog文件数量,故该日志会被自动删除(可以通过wal_keep_segments * 16M 来预估pg_xlog文件夹的存储峰值),所以,在日常运维中不建议人为对这种日志进行操作。

在生产实践中,如果我们不小心删除了xlog日志,又会带来什么样的影响呢?又有什么办法进行恢复呢?

xlog删除场景以及影响

  • 数据库正常运行期间删除xlog:
    • 删除后数据库持续正常运行:理论上不影响
    • 删除后数据库发生正常关闭:可以正常启动数据库,因为正常关机时会执行脏页落盘且恢复最新的一个wal日志,检查点和xlog记录的lsn一致,所以在启动阶段无需做回放,理论上不影响
    • 删除后数据库发生异常关闭:无法启动数据库,因为实例恢复阶段没有可用的wal文件,从而导致数据库无法启动
  • 数据库关闭状态下删除xlog:无法启动数据库,因为实例恢复阶段没有可用的wal文件,从而导致数据库无法启动

 

对于数据库能否正常启动,需要分析:

  1. 需要实例恢复,则需要相应的xlog存在且连续
  2. 无需实例恢复,需要保证最新的一个wal日志存在

恢复方式

对于误删pg_xlog下的xlog文件导致数据库无法启动的情况,有以下几种恢复策略可供选择:

  1. 使用归档(需要提前开启归档)
  2. 使用备机build功能(需要是集群架构)
  3. 使用物理备份(如果归档记录不全,会有一些数据量丢失,谨慎使用)
  4. pg_resetxlog(需要保证pg_xlog目录下的文件夹archive_status存在且权限为700,可手搓,恢复后可能会有一些数据量丢失,谨慎使用)

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论