postgres备份

2018-01-23  本文已影响345人  顶儿响叮当

| | 备份速度|备份范围|恢复范围|操作影响|备份原理|恢复成本|
| ------- |:------:|:-----:|:------:|:------:|:-----:|:-----:|:-------|
| 流复制 | 实时 | 全备 | 当前时刻|备库只读 | 预写日志 | 高可用切换|
| pg_dump(all) | 慢 |全备(库表) | 备份时刻|无,互斥锁,DDL|SQL访问|停库恢复|
| pg_basebackup|快| 全备 | 备份时刻|无|文件复制|停库恢复|
|连续归档(PITR)|快 | 增量 |上一次全备到当前任意时刻|无|归档日志|停库恢复

postgres安装

export POSTGRES_HOME=/usr/pgsql-9.6
export PGDATA=/var/lib/pgsql/9.6/data/
export PATH=$PATH:$POSTGRES_HOME/bin


TZ='Asia/Shanghai'; export TZ

postgres备份

一、SQL转储

SQL 转储方法的思想是创建一个由SQL命令组成的文件,当把这个文件回馈给服务器时,服务器将利用其中的SQL命令重建与转储时状态一样的数据库。pg_dump创建的备份在内部是一致的, 也就是说,转储表现了pg_dump开始运行时刻的数据库快照,且在pg_dump运行过程中发生的更新将不会被转储。pg_dump工作的时候并不阻塞其他的对数据库的操作。 (但是会阻塞那些需要排它锁的操作,比如大部分形式的ALTER TABLE)

二、文件系统级别备份

三、流复制

流复制允许一台后备服务器比使用基于文件的日志传送更能保持为最新的状态。 后备服务器连接到主服务器, 主服务器则在 WAL(write ahead log) 记录产生时即将它们以流式传送给后备服务器而不必等到 WAL文件被填充。在这种情况下主服务器上提交一个事务与该变化在后备服务器上变得可见之间存在短暂的延迟。 不过这种延迟比基于文件的日志传送方式中要小得多, 在后备服务器的能力足以跟得上负载的前提下延迟通常低于一秒。

默认情况下流复制是异步的

主库配置

 wal_level = replica
 hot_standby = on
 max_wal_senders = 2            #流复制最大连接数
 wal_keep_segments = 16        #xlog段的大小 

从库配置

    cp /usr/pgsql-9.6/share/recovery.conf.sample  $PGDATA/recovery.conf
    vim $PGDATA/recovery.conf
    standby_mode = on
    primary_conninfo = 'host=10.0.12.56 port=5432 user=rep password=123456'

测试 流复制

查看相关进程

查看记录点

查看主备库同步状态

四、在线增量备份与任意时间点恢复

在任何时间,PostgreSQL在数据集簇目录的pg_xlog/子目录下都保持有一个预写式日志(WAL)。这个日志存在的目的是为了保证崩溃后的安全:如果系统崩溃,可以"重放"从最后一次检查点以来的日志项来恢复数据库的一致性。该日志的存在也使得第三种备份数据库的策略变得可能:我们可以把一个文件系统级别的备份和WAL文件的备份结合起来。当需要恢复时,我们先恢复文件系统备份,然后从备份的WAL文件中重放来把系统带到一个当前状态。这种方法比之前的方法管理起来要更复杂,但是可以实现数据任意时间点恢复功能。

主库设置(基于流复制中主库的配置)

#开启归档模式
archive_mode = on
archive_command = 'ssh 10.0.12.5 test ! -f /data/postgres/pg_archive/%f && scp %p  10.0.12.5:/data/postgres/pg_archive/%f'

其中archive_command是归档命令,将归档文件传送至 10.0.12.5备份服务器的/data/postgres/pg_archive目录下

执行该命令前要保证 主备库服务器的免密登录, postgres用户目录在/var/lib/pgsql,切换postgres用户,执行ssh-keygen -t rsa,将生成的公钥/var/lib/pgsql/.ssh/id_rsa.pub添加到免密登录主机对应的/var/lib/pgsql/.ssh/authorized_keys文件中,注意公钥中的主机名需要在免密登录的主机上配置dns或直接改为ip地址。

重启主库pg_ctl restart

从库设置

cp /usr/pgsql-9.6/share/recovery.conf.sample  /data/postgres/pg_basebackuprecovery.conf

vim recovery.conf
restore_command = 'cp /data/postgres/pg_basebackup/%f %p'
recovery_target_time = '2017-11-14 18:31:00'

参考资料:

http://www.postgres.cn/docs/9.6/backup.html

https://yq.aliyun.com/articles/59355#

http://blog.csdn.net/yanggd1987/article/details/51209344

https://www.2cto.com/database/201708/670383.html

上一篇下一篇

猜你喜欢

热点阅读