zoukankan      html  css  js  c++  java
  • postgres 基于基础备份的恢复操作 (二)

    [postgres@kafka01 pgdata]$ pg_ctl -D /data/pgdata/ -l log.log start
    waiting for server to start.... stopped waiting
    pg_ctl: could not start server
    Examine the log output.
    
    --发现是起不来的,那缺少什么呢

    01,环境模拟

    postgres=# create table test20200605 (id int,name varchar(4));
    CREATE TABLE
    postgres=# insert into test20200605 values (1,'xx');
    INSERT 0 1
    postgres=# insert into test20200605 values (1,'ww');
    INSERT 0 1
    postgres=# select * from test20200605
    postgres-# ;
    id|name
    1|xx
    1|ww
    (2 rows)
    postgres=# select pg_switch_wal();  --日志转写
    pg_switch_wal
    1/F80165F8
    (1 row)
    
    创建基础备份
    pg_basebackup

    [postgres@kafka01 data]$ pg_basebackup -Ft -Pv -Xf -z -Z5 -p 5432 -D /data/backup/
    pg_basebackup: initiating base backup, waiting for checkpoint to complete
    pg_basebackup: checkpoint completed
    pg_basebackup: write-ahead log start point: 1/FC000028 on timeline 1
    4581748/4581748 kB (100%), 2/2 tablespaces
    pg_basebackup: write-ahead log end point: 1/FC000130
    pg_basebackup: base backup completed

      生成新的数据

    postgres=# insert into test20200605 values (1,'test');
    INSERT 0 1
    postgres=# select * from test20200605 postgres-# ; id | name ----+------ 1 | xx 1 | ww 1 | test (3 rows) postgres=#

    查看这个时间点

    postgres=# select now();
                  now
    -------------------------------
     2020-06-08 14:30:03.170239+08
    (1 row)

      删除这个表~~

    postgres=# drop table test20200605;
    DROP TABLE
    postgres=#

    二,时间点恢复操作

      01,停数据库

    [postgres@kafka01 data]$ /data/postgres/bin/pg_ctl stop -D /data/pgdata -mi
    waiting for server to shut down.... done
    server stopped

      02,移除就数据,使用新数据

    [postgres@kafka01 data]$ mkdir old_20200608
    [postgres@kafka01 data]$ mv kingle_tbs/ old_20200608/
    [postgres@kafka01 data]$ mv pgdata/ old_20200608/
    [postgres@kafka01 data]$ ll
    total 5171524
    -rw-rw-r-- 1 postgres postgres 5295636480 Jun  8 14:03 20200608postgre.tar.gz
    drwxrwxr-x 2 postgres postgres       4096 Jun  8 14:26 archive
    drwxrwxr-x 2 postgres postgres         45 Jun  8 14:26 backup
    drwxrwxr-x 4 postgres postgres         38 Jun  8 14:35 old_20200608
    drwxrwxr-x 8 postgres postgres         81 Apr 21 14:32 postgres
    drwxrwxr-x 2 postgres postgres         54 Apr 21 15:00 psql
    [postgres@kafka01 data]$ mkdir kingle_tbs pgdata -p
    [postgres@kafka01 data]$ chmod 0700  kingle_tbs pgdata

      03,使用旧备份恢复到对应的目录下

    [postgres@kafka01 data]$ tar xf backup/16386.tar.gz -C kingle_tbs/
    --pg_basebackup 生成的表空间备份
    [postgres@kafka01 data]$ tar xf backup/base.tar.gz -C pgdata/
    [postgres@kafka01 data]$
    ---pg_basebackup 生成的元数据备份

      04,配置recover.conf

    [postgres@kafka01 data]$ cp postgres/share/recovery.conf.sample pgdata/
    --一般再安装目录上有
    [postgres@kafka01 pgdata]$ mv recovery.conf.sample recovery.conf
    [postgres@kafka01 pgdata]$ chmod 0600 recovery.conf
    [postgres@kafka01 pgdata]$ vim recovery.conf --修改两个参数即可 restore_command = 'cp /data/archive/%f %p' # e.g. 'cp /mnt/server/archivedir/%f %p' --这个对应的是你的旧归档在哪里, 然后你的命令就对应这拷贝什么 recovery_target_timeline = 'latest' --恢复最近的最新的
    #recovery_target_name = ''      # e.g. 'daily backup 2011-01-26'
    #
    recovery_target_time = '2020-06-08 14:30:03.170239+08'      # e.g. '2004-07-14 22:39:00 EST'
    #
    #recovery_target_xid = ''
    #
    #recovery_target_lsn = ''       # e.g. '0/70006B8'
    #
    #recovery_target_inclusive = true
    #
    #
    # Alternatively, you can request stopping as soon as a consistent state
    # is reached, by uncommenting this option.
    #
    #recovery_target = 'immediate'
    #
    #
    # If you want to recover into a timeline other than the "main line" shown in
    # pg_control, specify the timeline number here, or write 'latest' to get
    # the latest branch for which there's a history file.
    #
    #recovery_target_timeline = 'latest'
    
    
    -- 每一个恢复策略都支持,时间 事务等等都在这个文件配置,详细配置见上一个文章

    05,启动数据库 然后同步观测日志情况

    [postgres@kafka01 pgdata]$ pg_ctl -D /data/pgdata/ -l log.log start
    waiting for server to start.... stopped waiting
    pg_ctl: could not start server
    Examine the log output.
    
    可以查看日志:
    [postgres@kafka01 pgdata]$ cat log.log
    2020-06-08 15:11:45.193 CST [24524] FATAL:  data directory "/data/pgdata" has group or world access
    2020-06-08 15:11:45.193 CST [24524] DETAIL:  Permissions should be u=rwx (0700).
    [postgres@kafka01 pgdata]$ ls
    
    
    发现是权限问题我们重新设置下权限然后启动
    
    [postgres@kafka01 data]$ chmod  0700 pgdata
    [postgres@kafka01 data]$ chmod  0700 kingle_tbs

    启动数据库即可恢复
  • 相关阅读:
    (新)Linux 安装、配置 MondoDB
    Docker 简介
    Windows 环境下的mysql安装及端口更换详解
    Jenkins的使用
    .Net Core Web API 上传图片或文件
    (不适用.Net Core)layui+WebApi上传文件、上传图片
    (不适用于.Net Core环境)jquery+WebAPI 上传文件、图片
    Linux .Net Core发布项目及搭建
    Jquery+JavaScript 随笔
    Vue 随笔
  • 原文地址:https://www.cnblogs.com/kingle-study/p/13065833.html
Copyright © 2011-2022 走看看