关键字:
KingbaseES、sys_receivewal、复制流、人大金仓
什么是sys_receivewal?
sys_receivewal作用是通过使用流复制协议将源数据库产生的wal日志流式的传送到指定备份服务器并存放到指定目录下。目前KES在集群之间能够自动进行WAL日志的同步,此功能例为PG原生功能,可使用在一些单机场景或需要手动备份WAL日志的场景。如: 将集群中主节点的WAL日志以流式存放至备节点指定目录下。
参数帮助 --help
部分参数测试示例
测试过程中通常需要构造一些操作产生大量WAL日志,能够比较直观看到备份效果。
-D (必选参数)
本地目录,接收WAL数据后生成的WAL文件会保存在该目录下。
例如 ./sys_receivewal -D /home/t2/wal_bak/ -h 10.10.8.61 -Usyskdb -p54321 接收的WAL日志将会保存在/home/t2/wal_bak下
-E 表示指定lsn
收到指定LSN后退出。如果当前接收的WAL记录的LSN和指定的 “lsn” 完全相等,会正常处理并继续接收,直到接收的WAL的LSN大于指定值。测试该参数可参考以下步骤(对LSN概念学习参考KingbaseES数据库的lsn与wal日志):
- 查找当前LSN位置
select * from pg_current_wal_lsn();
- 按需增加偏移量
此处用户名为syskdb,端口为54321,偏移到0/C7FCAC8
./sys_receivewal -D /home/t2/wal_bak/ -h 10.10.8.61 -Usyskdb -p54321 --slot=wal_bak -E 0/C7FCAC8 –v
到达LSN大于指定值“lsn”时停止流复制
-n 连接丢失时不循环连接直接退出
出现连接错误后立刻退出。如果不指定此参数,连接错误后会不断尝试重连。
不使用-n参数:
使用-n参数:
-S 表示要求sys_receivewal使用现有的复制槽
(1)首先使用--create-slot创建复制槽
例如 ./sys_receivewal -D /home/t2/wal_bak/ -h 10.10.8.61 -Usyskdb -p54321 --create-slot --slot=wal_bak -v
(2)再次创建会报错,加上--if-not-exists,该槽已经存在时不会抛出错误
例如 ./sys_receivewal -D /home/t2/wal_bak/ -h 10.10.8.61 -Usyskdb -p54321 --create-slot --slot=wal_bak -v --if-not-exists
(3)在主库上使用select * from pg_replication_slots;命令查看复制槽
(4)使用drop-slot删除复制槽
例如 ./sys_receivewal -D /home/t2/wal_bak -h 10.10.8.61 -Usyskdb -p 54321 --drop-slot --slot=wal_bak –v
-v 表示启用详细输出模式
例如 ./sys_receivewal -D /home/t2/wal_bak/ -h 10.10.8.61 -Usyskdb -p54321 -v -Z 1
-V 表示查看版本
-Z 表示启动压缩模式
启用WAL日志上的gzip压缩,并且指定压缩级别(共分为0到9个等级,0是不压缩而9是最大压缩)。所有的文件名后面都将自动添加后缀.gz 。
例如 ./sys_receivewal -D /home/t2/wal_bak/ -h 10.10.8.61 -Usyskdb -p54321 -v -Z 9 压缩级别为9
./sys_receivewal -D /home/t2/wal_bak/ -h 10.10.8.61 -Usyskdb -p54321 -v -Z 1 压缩级别为1
压缩级别为9:
压缩级别为1:
参考资料
《KingbaseES客户端应用参考手册-》 16. sys_receivewal