pg单机自动化日志备份系列一

本系列主要是介绍基于pg10版本的日志备份技术,如何实现自动日志备份(主要是笔者业务上有这种功能,尝试了几天几夜,特此记录下),本篇文章是基础篇,主要介绍pg的几种数据备份方式。

如果你已经熟悉,可以看pg单机自动化日志备份系列二

一、pg_dump
) 和 pg_restore

 以下描述摘自官方文档

pg_dump是一个用于备份PostgreSQL 数据库的工具。
它甚至可以在数据库正在使用的时候进行完整一致的备份。 pg_dump并不阻塞其它用户对数据库的访问(读或者写)

pg_restore用于恢复由pg_dump 转储的任何非纯文本格式中的PostgreSQL数据库。
它将发出必要的命令重建数据库,并把它恢复成转储时的样子。 归档(备份)文件还允许pg_restore有选择地进行恢复, 甚至在恢复前重新排列条目的顺序.

  描述已经说了两者大概功能,笔者平时也用pg_dump + psql 进行一些数据的转移,但是从使用心得来看,pg_dump每次备份就相当于全量备份,所以进行数据恢复时,也不能恢复到某一个时间点的数据,所以不采用pg_dump + pg_restore 进行自动化日志备份。(由使用pg_dump需求的同学,请自行去查阅官方文档)

  然后pg_dump每次只转储一个数据库,如果有更高的需求,可以看看pg_dumpall

二、文件系统级别备份
  说白了,就是复制pg的数据文件,但是在某些条件下,有缺点,比如用tar -cf backup.tar /var/lib/postgresql/data进行复制,有一下两点:
  1、数据库服务器必须被关闭,官方文档表示可能是tar和类似工具无法得到文件系统状态的一个原子的快照,还有服务器内部缓冲的原因。
  2、如果想通过相应的文件或者目录来备份或恢复特定的表或者数据库,是行不通的,因为缺少必要的日志文件(日志文件包含了事务的提交状态)。

 上面这种方式笔者没有尝试过(别怪我,真的是,精力有限。。。),不过,在开启wal归档备份的时候,笔者通过cp -rf /var/lib/postgresql/data/ /var/lib/postgresql/test复制整个目录的方式(没有关闭数据库),可以进行一次全量备份,而且在数据库启动时,也能成功加载出数据。不过不能在任意时间点进行恢复。根据官方文档的解释,是因为创建了数据目录的的“一致快照”,而且备份文件在数据看来就像是出了故障,所以用备份数据启动数据库的时候,就会尝试重放WAL日志(就是做redo),成功的进行数据恢复。

三、wal归档 和 基础备份(全量备份)
 wal归档就是预写式日志,就是记录了数据页的修改记录。pg痛过开启wal归档,记录下事务的执行日志,通过这些日志就可以支持任意时间点的数据恢复,即PITR。具体详细介绍

  启用wal归档功能,需要对pg配置文件postgresql.conf进行修改:

1、wal_level = replica
2、archive_mode = on
# backup_in_progress文件用来辅助wal日志备份,通过删除配合test指令控制wal日志备份
3、archive_command = 'test ! -f /var/lib/postgresql/backup_in_progress || (test ! -f /var/lib/postgresql/pg_log_archive/%f && cp %p /var/lib/postgresql/pg_log_archive/%f)'

/var/lib/postgresql/pg_log_archive是存放wal日志备份的地方。配置完成后,启动数据库,就开启了wal日志备份,在wal段文件达到16MB时,就会执行一次归档。当然也可以手动执行select pg_switch_wal();进行归档。

  wal归档功能有了,但是这只是相当于差异备份,还需要全量备份,下面就来看看全量备份(基础备份):

1、使用底层API进行,参考点

touch /var/lib/postgresql/backup_in_progress
# 开始基础备份,可以在代码里连接数据库执行
psql -c "select pg_start_backup('hot_backup');" # 需要用postgres用户
# 将数据库文件进行备份
tar -cf /var/lib/postgresql/backup.tar /var/lib/postgresql/data/
# 结束备份,可以在代码里连接数据库执行
psql -c "select pg_stop_backup();" # 需要用postgres用户
# 停止wal日志备份
rm /var/lib/postgresql/backup_in_progress
# 将wal日志和基础备份打包在一起
tar -rf /var/lib/postgresql/backup.tar /var/lib/postgresql/pg_log_archive

2、使用pg_basebackup

su - postgres; # 切换到 postgres用户
# 执行备份
pg_basebackup -Ft -X none -D - | gzip > /var/lib/postgresql/%f_base.tar.gz;

四、时间点恢复(PITR)

假设我们有一份备份文件,基础备份:/var/lib/postgresql/backup_base.tar.gz 和 wal归档目录:/var/lib/postgresql/pg_log_archive,pg的数据目录是:/var/lib/postgresql/data/pgdata通过以上步骤进行数据恢复:

1、解压数据

tar xvfz /var/lib/postgresql/backup_base.tar.gz -C /var/lib/postgresql/data/pgdata

2、配置recovery.conf

vim /var/lib/postgresql/data/pgdata/recovery.conf

# recovery.conf 配置下面两行

# 利用wal日志进行redo
restore_command = 'cp /var/lib/postgresql/pg_log_archive/%f %p'
# 指定要恢复的时间点,也可以不指定,直接恢复所有数据
recovery_target_time = '2019-10-10 18:00:00 UTC'

3、指定/var/lib/postgresql/data/pgdata为pg的数据目录启动pg,就可以进行数据恢复。如果是指定恢复到某一时间点,即有recovery_target_time配置项,在启动数据库后,还需要执行语句select pg_wal_replay_resume();开启wal备份,完成本次数据恢复操作。

下一篇:pg单机自动化日志备份系列二

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容