暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL中的异机归档

原创 Imaxl 2020-06-09
2974

一、PostgreSQL如何实现归档日志的异机备份?

之前有人询问oracle中的异机归档备份在PostgreSQL中如何实现,认真的想想也找了下PG的文档,发现并没有相关的操作使用说明,那么PG到底能不能做异机备份呢?

首先:

我们要从PostgreSQL的归档配置文件研究一下
wal_level = minimal # minimal, archive, hot_standby, or logical
archive_mode = off # allows archiving to be done
archive_command = ‘’ # command to use to archive a logfile segment
# placeholders: %p = path of file to archive
# e.g. ‘test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f’
通过以上的配置我们发现跟归档相关的三个核心参数,其中wal_level 、archive_mode 的使用在参数说明中就已经给出相对应的固定几个value,根本实现不了异机的备份。

那么剩下的archive_command 参数的说明发现可操作的灵活度还是蛮高的,我之前在archive_command 中实现过归档日志的压缩、兼容shell语法、 逻辑或,逻辑与运算。

二、分析archive_command 实现归档的异机备份

 由于有过之前的归档压缩经验,考虑到archive_command中可以支持操作系统级的命令,那么异机拷贝也就不是什么难事了。
 1、先分析下archive_command中说白了就是对%p 和%f的操作,
      %p 要归档的wal路径
      %f  归档的wal文件名
 2、要通过系统来实现异机文件拷贝的动作
       scp 命令
 3、如何实现免密的scp 动作呢?
       免密登录

三、实现异机归档的步骤:

 1、编写archive_command,拷贝归档目录下的文件到对端的归档目录下
      scp %p user@X.X.X.X:/对端归档路径/pg_%f
 2、对端机器创建归档目录:
    [root@node1 ]# mkdir archive_31
    [root@node1 ]# chown pguser.pguser archive_31/
 3、配置免密:
    生成公钥私钥对
    ssh-keygen -t rsa
    拷贝公钥到对端机器
    scp id_rsa.pub root@10.80.x.x:~/.ssh/id_rsa.pub_temp
    将公钥的内容记得以追加的方式添加.ssh目录下的authorized_keys文件,若文件不存在则新建
 4、对端机器操作
    cat id_rsa.pub_temp >> authorized_keys
 5、验证:
    scp id_rsa.pub root@10.80.5.25:/tmp
    Address 10.80.5.25 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
    id_rsa.pub                                                                       100% 392    0.4KB/s  00:00  
 6、修改postgresql.conf配置文件
    wal_level = archive 
    archive_mode = on
    archive_command = 'scp %p root@10.80.x.x:/home/pguser/archive_31/pg_%f'
    ##PostgreSQL内部调用命令,对照更能增加理解
    scp pg_xlog/00000001000003AF00000017 root@10.80.x.x:/home/pguser/archive_31/pg_00000001000003AF00000017

四、需要注意的事项

  在创建密钥对的时候要注意在数据库的用户下执行,把管理数据库用户的登录的秘钥对拷贝对对端机器上,要不数据库日志会报错,

2020-06-09 16:38:01 CST,0,LOG,00000,‘archive command failed with exit code 1’,‘The failed archive command was: scp pg_xlog/00000001000003AF00000017 root@10.80.x.x:/home/pguser/archive_31/pg_00000001000003AF00000017’,’’
备注:验证环境是9.x

最后修改时间:2020-06-09 21:16:36
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论