在一般的生产环境中,数据库都需要开启归档模式,那么在lightdb中如何开启归档模式呢?
1、查看数据库归档状态
[lightdb@lightdb defaultCluster]$ ps -ef|grep archiver
lightdb 10689 10447 0 12:57 pts/0 00:00:00 grep --color=auto archiver
2.设置归档路径
[root@lightdb ~]# mkdir /pgarchive
[root@lightdb ~]# chown lightdb.lightdb /pgarchive/
3.查看wal_level
配置
lightdb@postgres=# show wal_level;
wal_level
-----------
replica
(1 row)
默认为replica模式,如果为minimal模式,则配置归档参数后出现如下报错:
[lightdb@lightdb defaultCluster]$ lt_ctl restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2022-07-08 13:21:20.358908T @ postmaster XX000[2022-07-08 13:21:20 CST] 0 [12823] FATAL: WAL archival cannot be enabled when wal_level is "minimal"
stopped waiting
lt_ctl: could not start server
Examine the log output.
4.配置归档参数
在$PGDATA/postgresql.conf中配置参数
archive_mode = on
archive_command = 'test ! -f /pgarchive/%f && cp %p /pgarchive/%f'
在archive_command中,%p会被将要归档的文件路径所替代,而%f只会被文件名所替代上面的archive_command翻译过来
test ! -f /pgarchive/000000010000000200000006 && cp $PGDATA/pg_wal/000000010000000200000006 /pgarchive/000000010000000200000006
也就是说如果对应的wal日志000000010000000200000006在/pgarchive中没有,那么则执行cp命令,将$PGDATA/pg_wal中的000000010000000200000006拷贝到/pgarchive中
5.启动数据库,检查归档模式
[lightdb@lightdb defaultCluster]$ ps -ef|grep archiver
lightdb 14639 14630 0 13:52 ? 00:00:00 lightdb: archiver ###有这进程代表开启了归档
lightdb 14682 10447 0 13:52 pts/0 00:00:00 grep --color=auto archiver
6.设置归档文件保留策略
因为开启归档模式,会占用大量的磁盘空间,如果归档空间满了,可能会导致数据库宕机
lightdb_archive_dir='/archive'
lightdb_archive_retention_size=5 ###保留归档文件的个数
当然也可以选择在archive_command 配置,示例删除3天前的归档文件
archive_command = 'test ! -f /pgarchive/%f && cp %p /pgarchive/%f && find /pgarchive -type f -mmin +3 | xargs -i rm {}'