加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Postgresql 9.9日志热备份日志

发布时间:2020-12-13 16:22:27 所属栏目:百科 来源:网络整理
导读:我的设置 我刚刚在postgres中设置了流复制(9.3.5),虽然流式传输正如我所料,但我很难让我的备用数据库运行archive_command所以我可以存储所有的日志文件. 掌握postgres.conf: wal_level = hot_standbycheckpoint_segments = 8max_wal_senders = 4wal_keep_se
我的设置

我刚刚在postgres中设置了流复制(9.3.5),虽然流式传输正如我所料,但我很难让我的备用数据库运行archive_command所以我可以存储所有的日志文件.

掌握postgres.conf:

wal_level = hot_standby
checkpoint_segments = 8
max_wal_senders = 4
wal_keep_segments = 8

备用postgres.conf:

wal_level = hot_standby
checkpoint_segments = 8
archive_mode = on
archive_command = 'test ! -f /backup/postgres_archive/constant/%f && cp %p /backup/postgres_archive/constant/%f'
max_wal_senders = 3
wal_keep_segments = 8
hot_standby = on

备用recovery.conf:

standby_mode = 'on'
primary_conninfo = 'host=my-host.example.com port=5432 user=replicator password=my_password sslmode=require'
restore_command = 'cp /backup/postgres_archive/constant/%f %p'
trigger_file = '/tmp/postgresql.trigger'

我正在尝试写入的文件夹的权限是正确的,当我运行用户postgres时,我手动运行archive_command工作正常.为了确保我尝试将存档命令更改为一个简单的触摸(再次,作为postgres用户测试正常),但它没有任何区别.

有效的事情

我的数据库仍处于相对初期阶段,因此根本没有太大的负担.为此,我只是通过将随机数据写入测试表来模拟它.在我提交主人之后,我可以看到在备用数据库中直接出现的变化,所以我很满意.

我不太明白的一件事是WAL文件是备用的,主机略有不同,但它几乎看起来好像有一个或那个配置了WAL还没有开始写入(这不是在另一).这是正常的吗?

如果我在主服务器上选择pg_switch_xlog()然后再写一些,则主服务器和备用服务器似乎都会切换并开始写入下一个/同一个WAL文件.这反映了我对正在发生的事情的理解.

救命

我对这一切有几个疑问.我已经阅读了关于这个的postgres手册的每一页,但在我的特定情况下我找不到任何帮助.

我试着找到一些获取postgres的方法来向我展示更多关于它可能在日志文件中做什么/不做什么的信息,但它没有提供任何有用的东西.在调试时,我应该在配置中更改哪些内容以尽可能多地获取日志中的有用信息?

就日志存档运行的时间而言,我猜是因为主控器有点控制哪个WAL文件处于活动状态,它实际上是在备用数据库上运行日志传输时的触发器.那是对的吗?

流式复制似乎都像我期望的那样工作,但尝试在备用数据库上运行日志传送似乎甚至没有尝试.我究竟做错了什么?

我也遇到了这个问题.这里的关键实际上是备用数据库“recovery.conf”中的archive_cleanup_command.当从主服务器处理WAL段时,备用数据库将运行archive_cleanup_command命令,因此,您知道可以备份该WAL段和所有先前的段.在我的“recovery.conf”中,我有:
archive_cleanup_command = '/var/lib/postgresql/wal_backup_mirror.sh "%r"'

该脚本的内容是(简化版):

CURRENT_WAL_FILE="$1"
for WAL_FILE in $(find /pg_logs/main -maxdepth 1 -type f | sort | awk "$0 <= "/pg_logs/main/${CURRENT_WAL_FILE}""); do
  WAL_NAME=$(basename "$WAL_FILE")
  gzip -c "$WAL_FILE" > "/backups/wal/${WAL_NAME}.gz"
  #now upload the just created .gz to S3 or some other offsite storage

  rm -f "${WAL_FILE}"
done

请注意,我在备份之后删除了WAL段以使我的日志目录在备用数据库上保持干净,但是需要注意的是级联复制设置,因为链路上的备用数据库可能仍然需要那些文件.

最后要注意的是,请记住,备份WAL段是不够的,必须与某种常规完整备份(pg_basebackup)结合使用.我们每天都进行完整备份,然后根据需要全天备份WAL段.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读