文档首页/ 云数据库 RDS_云数据库 RDS for PostgreSQL/ 最佳实践/ 使用pg_waldump解析RDS for PostgreSQL的wal日志
更新时间:2025-09-04 GMT+08:00

使用pg_waldump解析RDS for PostgreSQL的wal日志

RDS for PostgreSQL实例购买完成后,可以先登录到Linux弹性云服务器,在ECS上安装PostgreSQL客户端,然后通过开源pg_waldump解析RDS for PostgreSQL的wal日志。

步骤1:购买ECS

  1. 登录管理控制台,查看是否有弹性云服务器。
  2. 购买弹性云服务器时,选择Linux操作系统,例如CentOS。

    由于需要在ECS下载PostgreSQL客户端,因此需要为ECS绑定弹性公网IP(EIP)。

    购买Linux弹性云服务器请参考《弹性云服务器用户指南》中“购买弹性云服务器”章节。

步骤2:安装PostgreSQL客户端

PostgreSQL客户端版本一定要和RDS for PostgreSQL实例版本保持一致,否则可能导致wal日志解析失败。

  1. 登录ECS实例,请参见《弹性云服务器用户指南》中“Linux弹性云服务器远程登录(VNC方式)”。
  2. 安装PostgreSQL客户端。

    PostgreSQL社区提供了针对不同操作系统的客户端安装方法。通过操作系统的安装工具直接下载安装。此安装方式比较简单,但是对ECS操作系统有要求,只有PostgreSQL社区中支持的操作系统才可以使用该安装方式。

    使用操作系统默认安装,当前使用的Linux操作系统是CentOS 7,通过工具安装最高版本是15版本。

    图1 获取安装工具

    执行安装命令:

    sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    sudo yum install -y postgresql15-server

    查看是否安装成功:

    psql -V
    图2 安装成功
  1. 登录ECS实例,请参见《弹性云服务器用户指南》中“Linux弹性云服务器远程登录(VNC方式)”。
  2. 安装PostgreSQL客户端。

    源码安装方式,该安装方式对RDS for PostgreSQL实例的版本以及ECS的操作系统没有限制。

    下面以Huawei Cloud EulerOS 2.0镜像的ECS为例,安装PostgreSQL 16.4版本客户端。

    图3 查看ECS镜像
    1. 要支持SSL,需要在ECS上提前下载openssl。
      sudo yum install -y openssl-devel
    2. 官网获取代码下载链接,使用wget直接下载安装包或者下载到本地后上传到ECS上。
      wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz
    3. 解压安装包。
      tar xf postgresql-16.4.tar.gz
    4. 编译安装。
      cd postgresql-16.4
      ./configure --without-icu --without-readline --without-zlib --with-openssl
      make -j 8 && make install

      不指定--prefix,表示默认路径为“/usr/local/pgsql”,因为只安装客户端采用最简安装。

      图4 编译安装
    5. 配置环境变量,在“/etc/profile”文件中添加以下内容。
      export PATH=/usr/local/pgsql/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
      source /etc/profile
    6. 测试psql是否可使用。
      psql -V
      图5 测试psql可用

步骤3:获取RDS for PostgreSQL实例中的增量wal日志

  1. 下载增量备份文件,假设将下载的增备文件存放在/download/backup。
  2. 使用提供的脚本,解压后执行如下命令,将增量备份文件解压到一个临时目录(例如/tmp/wal)下。
    python restore_wal.py /download/backup /tmp/wal
    • /download/backup:PostgreSQL增量备份文件的目录。
    • /tmp/wal:临时存放pg_wal日志的目录。

步骤4:使用pg_waldump解析指定wal日志

示例:如下命令显示wal日志000000010000000000000003中前5行记录内容。

pg_waldump -n 5 000000010000000000000003

回显如下:

rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 0/03000028, prev 0/02000100, desc: RUNNING_XACTS nextXid 765 latestCompletedXid 764 oldestRunningXid 765
rmgr: XLOG        len (rec/tot):    114/   114, tx:          0, lsn: 0/03000060, prev 0/03000028, desc: CHECKPOINT_SHUTDOWN redo 0/3000060; tli 1; prev tli 1; fpw true; xid 0:765; oid 16393; multi 1; offset 0; oldest xid 730 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 0; shutdown
rmgr: XLOG        len (rec/tot):     54/    54, tx:          0, lsn: 0/030000D8, prev 0/03000060, desc: PARAMETER_CHANGE max_connections=200 max_worker_processes=8 max_wal_senders=10 max_prepared_xacts=10 max_locks_per_xact=64 wal_level=logical wal_log_hints=off track_commit_timestamp=off
rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 0/03000110, prev 0/030000D8, desc: RUNNING_XACTS nextXid 765 latestCompletedXid 764 oldestRunningXid 765
rmgr: Standby     len (rec/tot):     50/    50, tx:          0, lsn: 0/03000148, prev 0/03000110, desc: RUNNING_XACTS nextXid 765 latestCompletedXid 764 oldestRunningXid 765

更多pg_waldump的详细操作,请参考社区文档

常见问题

问:执行命令时出现如下报错怎么办?

pg_waldump: error: could not find a valid record after xxx/xxxxxxxx

答:执行pg_waldump -V命令查看pg_waldump的版本,查看pg_waldump的大版本是否与RDS for PostgreSQL实例的大版本一致。

如果版本不一致,重新执行步骤2:安装PostgreSQL客户端,安装正确的版本。