首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当日志旋转旋转PostgreSQL日志文件时,postgresql将停止日志记录

当日志旋转旋转PostgreSQL日志文件时,postgresql将停止日志记录
EN

Database Administration用户
提问于 2019-10-23 13:10:32
回答 3查看 3.2K关注 0票数 0

我安装了

代码语言:javascript
复制
PostgreSQL 10.6 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.2.1 20180905 (Red Hat 8.2.1-3), 64-bit

并配置如下:

代码语言:javascript
复制
log_filename = 'postgresql.log'

但是,我希望通过日志旋转来管理日志轮转,而不是通过PostgreSQL来管理内部日志轮转:

代码语言:javascript
复制
#vim /etc/logrotate.d/postgresql

/var/lib/pgsql/data/log/postgresql.log {
    daily
    rotate 7
    compress
    create 0664 postgres postgres
    missingok
    notifempty
    sharedscripts
}

但是PostgreSQL将停止登录到旋转的/var/lib/pgsql/data/log/postgresql.log文件中。唯一的解决方案是systemctl restart postgresql,它可以放置在log旋转式postrotate/endscript块中,但是如果在关键的生产系统上这样做,我就不能这样做。

您有什么建议吗?如何正确地日志旋转PostgreSQL日志文件而不需要重新启动PostgreSQL?

谢谢!

更新:在重新加载PostgreSQL期间,它会查找更改。我找到了一个如何实现PostgreSQL将开始登录到旋转的postgresql.log文件的解决方案--我需要修改配置文件,例如注释掉/修改log_filename,然后重新加载PostgreSQL,并将更改还原回PostgreSQL并重新加载PostgreSQL。因为PostgreSQL查找配置文件中的更改。但是,如果还有比触摸配置文件更好的解决方案,我会很高兴的。

EN

回答 3

Database Administration用户

回答已采纳

发布于 2019-10-24 08:56:49

这是我使用sed的实际解决方法:

代码语言:javascript
复制
/var/lib/pgsql/data/log/postgresql*.log {
    daily
    rotate 7
    compress
    delaycompress
    create 0664 postgres postgres
    missingok
    notifempty
    sharedscripts
    prerotate
        sed -i "s/log_filename = 'postgresql.log'         # log file name pattern,/log_filename = 'postgresql_rotate.log'         # log file name pattern,/" /var/lib/pgsql/data/postgresql.conf
        systemctl reload postgresql
        sleep 1
    endscript
    postrotate
        sed -i "s/log_filename = 'postgresql_rotate.log'         # log file name pattern,/log_filename = 'postgresql.log'         # log file name pattern,/" /var/lib/pgsql/data/postgresql.conf
        systemctl reload postgresql
    endscript
}

何地线

代码语言:javascript
复制
log_filename = 'postgresql.log'         # log file name pattern,

将临时重命名为postgresql_rotate.log,重新加载PostgreSQL,然后将日志文件重命名为postgresql.log,然后再重新加载PostgreSQL。

延迟压缩是因为postgresql_rotate.log需要适当地旋转临时旋转日志文件。如果我们只是注释掉,log_filename PostgreSQL将创建按实际时间命名的日志文件,这是永远不会旋转的,因为它会更改每次旋转的名称。因此,前两个文件将保持未压缩和所有其他压缩。

如果你能找到更好的解决办法,我会很高兴的。

票数 0
EN

Database Administration用户

发布于 2020-01-10 13:51:03

如果您能够接受丢失日志数据的小风险,您可以尝试使用log旋转式的copytruncate指令

票数 1
EN

Database Administration用户

发布于 2019-10-24 06:26:21

PostgreSQL打开了旧的日志文件,并一直向它写入。重命名文件不会改变这一点。

尝试添加一个调用postrotate命令

代码语言:javascript
复制
pg_ctl reload -D /path/to/datadir

或者用其他方式向邮递员发送信号1。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/251784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档