您的位置:首页 > 数据库

PostgreSQL之 pg_basebackup

2018-01-26 00:06 363 查看
pg_basebackup 简介

是从postgresql 9.1版本开始提供的一个方便基础备份的工具,它会把整个数据库实例的数据都拷贝出来,而不只是把实例中的部分(如某个数据库或表)单独备份;

 

pg_basebackup工作原理

创建检查点,打开FPW,创建备份标签(存储检查点位置,时间等信息);

通过流复制协议与数据库建立连接,WAL Sender进程向pg_basebackup发送数据库物理文件;

pg_basebackup接收到文件后写入目标位置(压缩或不压缩)。

 

pg_basebackup 参数说明

可以通过pg_basebackup --help
详细查看

-h 指定连接的数据库的主机名或IP地址,这里就是主库的ip。

-U 指定连接的用户名,此处是我们刚才创建的专门负责流复制的repl用户。

-F 指定了输出的格式,支持p(原样输出)或者t(tar格式输出)。

-x 表示备份开始后,启动另一个流复制连接从主库接收WAL日志。

-P 表示允许在备份过程中实时的打印备份的进度。

-R 表示会在备份结束后自动生成recovery.conf文件,这样也就避免了手动创建。

-D 指定把备份写到哪个目录,这里尤其要注意一点就是做基础备份之前从库的数据目录(/usr/local/postgresql/data)目录需要手动清空。

-l 表示指定一个备份的标识

 

pg_basebackup 备份过程

1)开启归档

创建归档目录

mkdir -p /ssd/pg957/arch

chown -R postgres:postgres /ssd/pg957/arch

配置归档命令

vi $PGDATA/postgresql.conf

archive_mode = on

archive_command = 'DATE=`date +%Y%m%d`; DIR="/ssd/pg957/arch/$DATE"; (test -d $DIR || mkdir -p $DIR) && cp %p $DIR/%f'

wal_level = hot_standby

 

注解:

%p 表示xlog文件名$PGDATA的相对路径,如pg_xlog/00000001000000190000007D

%f 表示xlog文件名,如00000001000000190000007D

 

2)重启数据库使参数生效,验证归档。

checkpoint;       #备注1

select pg_switch_xlog();

 

[root@hgdb01 20180117]# pwd

/ssd/pg957/arch/20180117

[root@hgdb01 20180117]# ls

000000020000000000000003  000000020000000000000004

 

3)创建replication权限的角色,或者超级用户的角色。

create role repl nosuperuser replication login connection limit 32 encrypted password '111111';

 

4)配置pg_hba.conf,添加以下内容

------

host replication repl 0.0.0.0/0 md5

 

5)执行备份(因为使用流复制协议,所以支持异地备份)

pg_ctl reload  #执行加载配置的命令

mkdir `date +%F` ; pg_basebackup -F t -x -D /dbbak/`date +%F` -h 192.168.137.222 -p 1921 -U repl

6)备份完毕,查看备份文件

[postgres@hgdb01 ~]$ cd /dbbak/2018-01-17

[postgres@hgdb01 2018-01-17]$ ll

total 46M

-rw-rw-r--. 1 postgres postgres 1.5K Jan 17 01:13 16400.tar

-rw-rw-r--. 1 postgres postgres  46M Jan 17 01:13 base.tar

[postgres@hgdb01 2018-01-17]$  tar -tvf base.tar |less       #查看备份包内容

 

基于pg_basebackup热备份的还原过程

1)在需要备份的库中创建标记表,并检查点和归档指令

create table t_flag(id int) tablespace tbls01;

insert into t_flag values(1);

checkpoint;        #刷新内存脏页到磁盘

select pg_switch_xlog();    #手动日志归档

 

2)停止数据库并删除数据

 

3)reconvery.conf文件配置还原参数

$cp $PGHOME/share/recovery.conf.sample $PGDATA/recovery.conf

vi $PGDATA/recovery.conf   #备注

restore_command = 'cp /ssd/pg957/arch/20180118/%f %p'

recovery_target_timeline = 'latest'

 

4)启动数据库并做数据查看验证是否恢复完成

pg_ctl start 

by 波罗
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: