使用pg_waldump解析RDS for PostgreSQL的wal日志
RDS for PostgreSQL实例购买完成后,可以先登录到Linux弹性云服务器,在ECS上安装PostgreSQL客户端,然后通过开源pg_waldump解析RDS for PostgreSQL的wal日志。
步骤1:购买ECS
- 登录管理控制台,查看是否有弹性云服务器。
- 有Linux弹性云服务器,执行步骤2:安装PostgreSQL客户端。
- 无Linux弹性云服务器,执行2。
- 购买弹性云服务器时,选择Linux操作系统,例如CentOS。
由于需要在ECS下载PostgreSQL客户端,因此需要为ECS绑定弹性公网IP(EIP)。
购买Linux弹性云服务器请参考《弹性云服务器用户指南》中“购买弹性云服务器”章节。
- 登录ECS实例,请参见《弹性云服务器用户指南》中“Linux弹性云服务器远程登录(VNC方式)”。
- 安装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 安装成功
- 登录ECS实例,请参见《弹性云服务器用户指南》中“Linux弹性云服务器远程登录(VNC方式)”。
- 安装PostgreSQL客户端。
源码安装方式,该安装方式对RDS for PostgreSQL实例的版本以及ECS的操作系统没有限制。
下面以Huawei Cloud EulerOS 2.0镜像的ECS为例,安装PostgreSQL 16.4版本客户端。
图3 查看ECS镜像- 要支持SSL,需要在ECS上提前下载openssl。
sudo yum install -y openssl-devel
- 在官网获取代码下载链接,使用wget直接下载安装包或者下载到本地后上传到ECS上。
wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz
- 解压安装包。
tar xf postgresql-16.4.tar.gz
- 编译安装。
cd postgresql-16.4 ./configure --without-icu --without-readline --without-zlib --with-openssl make -j 8 && make install
不指定--prefix,表示默认路径为“/usr/local/pgsql”,因为只安装客户端采用最简安装。
图4 编译安装 - 配置环境变量,在“/etc/profile”文件中添加以下内容。
export PATH=/usr/local/pgsql/bin:$PATH export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH source /etc/profile
- 测试psql是否可使用。
psql -V
图5 测试psql可用
- 要支持SSL,需要在ECS上提前下载openssl。
步骤3:获取RDS for PostgreSQL实例中的增量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客户端,安装正确的版本。