postgresql中提供了pitr作为增备的方案,在全量物理备份的基础上通过wal文件的备份来提供所有数据修改的记录,当需要还原的时候通过wal日志回放进行数据还原,还原后面在讲,本帖主要说明通过脚本和crontab定时任务来对数据库进行定期的自动全量备份和pitr增量备份,避免一个基础备份+长时间备份日志造成回滚或者还原话费大量的时间。
1、编写 base_backup.sh,提供定期全量基础备份。
该脚本执行过程中,会先执行pg_start_backup() 函数,然后开始进行整个$PGDATA目录压缩,完毕后执行 pg_stop_backup() 函数进行备份退出。所有完成后清理旧的全量备份文件。
#!/bin/bash base_dir="/home/lyf/pgback/back_9.6" pirt_dir="/home/lyf/pgback/back_9.6" pg_home="/home/lyf/9.6/pg9.6" pg_port=5555 pg_data="/home/lyf/9.6/pg9.6/data" # wal dir is not null if test -z "$pirt_dir" then echo "pirl_dir is null" exit else if [ ! -d "$pirt_dir" ] then mkdir "$pirt_dir" fi fi # info file _date=$(date +%y%m%d) echo $_date>"${pirt_dir}/info" if test -z "$base_dir" then echo "base dir is null" exit else echo "base dir is : ${base_dir}" fi if test -z "$pg_home" then echo "pg_home is null" exit else echo "pg_home is : ${base_dir}" fi if test -z "$pg_port" then echo "pg_port is null" pg_port=5432 fi if test -z "$pg_data" then echo "pg_data is null" pg_data="${pg_home}/data" fi echo "pg_home:${pg_home},pg_port=:${pg_port},pg_data:${pg_data}" #new dir #back base data ${pg_home}/bin/psql -U postgres -p ${pg_port} -h 127.0.0.1 -c " select pg_start_backup('${_date}') " #start back up zip -r "$base_dir"/"$_date".zip "$pg_data"/* #back end ${pg_home}/bin/psql -U postgres -p ${pg_port} -h 127.0.0.1 -c " select pg_stop_backup() " #clear old dir wal for p_dir in $(ls ${base_dir}) do if test -d ${base_dir}/${p_dir} && [ ${p_dir} \< $_date ] then echo "clear data ${p_dir}" rm -rf ${base_dir}/${p_dir} fi done # clear old base back zip for file in $(ls ${base_dir}/*.zip ) do fname=${file##*/} fdate=${fname%%.*} if ! test -z $fdate && [ $fdate \< $_date ] then echo "rm file:${base_dir}/${fname}" rm ${base_dir}/${fname} fi done # new wal back dir # export pitr_dir=${curr_dir}
需要修改其中各个配置为自己当前数据库的安装目录和配置。修改完毕后将该脚本添加到crontab任务列表中,该脚本目前有存在的缺陷为:全量备份时间间隔必须大于1天,因为全量备份的备份文件名是以天为单位创建的。
#10 0 * * * sh /home/lyf/pgback/base_backup.sh > /home/lyf/pgback/back.log 2>&1
所有的路径需要换为正确的路径。
2、编写pitr日志备份脚本 pitr.sh 。
该脚本配置postgresql.conf中的archive_command 来使用,通过配置文件将wal日志准确的放入最近一次全量备份后制定的wal日志目录。
#!/bin/bash # pirt_dir=${WAL_DIR} pirt_dir="/home/lyf/pgback/back_9.6" _p=$1 _f=$2 if [ x$_p = x ] then # has %p exit fi if [ x$_f = x ] then exit fi if test -z "$pirt_dir" then echo "wal dir is null" exit fi info_file="${pirt_dir}"/info if [ ! -f "$info_file" ] then _date=$(date +%y%m%d) echo $_date>"$info_file" fi info_context=$(cat "$info_file") echo "info context is ${info_context}" # echo "${info_context}" log_dir="$pirt_dir"/"$info_context" # echo "log_dir:${log_dir}" if [ ! -d "$log_dir" ] then mkdir "$log_dir" fi # echo "test cp " if [ ! -f "${log_dir}/%f" ] then echo "p is $_p" echo "f is $_f" # echo "%p $log_dir/%f" cp $_p ${log_dir}/$_f fi # test ! -f ${log_dir}/%f && cp %p ${log_dir}/%f
3、 修改postgresql的配置文件 postgresql.conf。
wal_level = replica # minimal, replica, or logical archive_mode = on archive_command = 'sh /home/lyf/pgback/pitr.sh(pitr.sh的路径) %p %f >> /home/lyf/pgback/pitr.log(日志记录文件) '
4、重启数据库。
此时增量备份即正常运作,在crontab中配置的时间点会做一次全量的基础备份,然后切换wal备份目录。
5、通过备份还原
5.1、 停库。
5.2、先将当前的$PGDATA目录进行备份,完成后开始利用基础备份和wal日志来恢复。(此备份目的不多说了,所有对数据的操作之前最好都能有一次备份,即使当前的数据可能已经是损坏或者不想要的)
5.3、从备份目录中(配置文件中的$base_dir)解压缩备份的基础备份.zip文件,解压缩后修改 $PGDATA的指向为解压缩后的路径。
5.4、从share 目录移过来recovery.conf文件到新的$PGDATA中,编辑文件修改:restore_command=’ cp /home/lyf/pgback/back_9.6/20170531/%f %p’
标注:红色部分要替换为真实的pirt备份目录。参考pitr.sh中配置的目录中取和基础备份中文件名一致的文件夹即可。
5.5、 启动数据库会,可以看到开始还原。
5.6、 如果要还原到具体的targetlabel 或者time 修改一下的配置
#recovery_target_name = '' # e.g. 'daily backup 2011-01-26' # #recovery_target_time = '' # e.g. '2004-07-14 22:39:00 EST' # #recovery_target_xid = '' # #recovery_target_inclusive = true
相关推荐
①添加【postgres】用户,数据库安装在postgres用户目录【/home/postgres/disk_d/applications/service/postgresql】路径下, ②给新用户授权 ③解压数据库文件 ④安装数据库依赖包 ⑤编译数据库 ⑥安装数据库 ⑦...
以下是对“postgresql数据库定时备份脚本(linux)”这一主题的详细讲解。 一、PostgreSQL备份类型 1. **完整备份**:包含所有数据库对象,如表、索引、视图等。 2. **增量备份**:基于上一次完整备份,仅备份自...
nacos-2.0.1 postgresql初始化脚本
使用postgresql客户端备份数据比较慢,并且使用客户端备份时不能进行其他操作,使用脚本备份比较方便。 注意事项: 1.使用本脚本 要修改成你自己要备份的数据库、连接IP、用户名、密码 2.备份前要用postgresql客户端...
总结,PostgreSQL数据库备份脚本是实现自动化备份的关键工具,通过合理配置和定期执行,可以有效保护数据安全。同时,确保备份策略的完善性和恢复过程的顺畅性也是至关重要的。在实际应用中,应结合业务需求和资源...
用于自动安装postgresql,只需要先配置好yum源,运行此脚本即可安装完成postgresql
适配教程一堆github地址加载真的让人很崩溃,想要拿来主义,但是大家都太好了,都给的鱼竿不给鱼。 我来给最后一道坎递纸吧。 nacos适配 pg的sql脚本
CentOS 一键安装PostgreSQL10.2 shell脚本,脚本中已表明可更改版本的位置
PostgreSQL的主备复制允许数据从主节点实时同步到备用节点,确保在主节点出现故障时,备用节点可以无缝接管服务。在PostgreSQL 9.5中,可以使用WAL(Write-Ahead Log)日志流复制技术,通过`wal_level`参数设置为`...
本教程将介绍如何使用FastAPI与PostgreSQL进行基本的增删改查(CRUD)操作。 首先,确保已经安装了必要的库:fastapi、uvicorn和psycopg2。`fastapi`是用于构建API的框架,`uvicorn`是一个ASGI服务器,用于运行Fast...
Linux中一键重启postgresql的脚本命令
PostgreSQL-14.2官网正式版源码 & 全自动一键部署脚本(基于CentOS 7,其他系统修改脚本命令即可兼容)。 详细安装过程见博客: https://blog.csdn.net/kinshy/article/details/112134102
DBeaver 离线免安装版本的配置流程(纯离线模式,附带PostgreSql数据库相关驱动和脚本)
本主题主要关注在Linux环境下使用Shell脚本来实现Java Development Kit (JDK) 和 PostgreSQL 数据库的自动化安装。 首先,让我们深入了解一下什么是Shell脚本。Shell脚本是Linux或类Unix操作系统中的一种命令解释器...
自己写的初始化一键安装pg数据库脚本,喜欢的可以拿去用
在本项目中,我们主要探讨如何使用SpringBoot与MyBatis框架来构建一个基于PostgreSQL数据库的三层架构应用,实现数据的增、删、改、查功能。首先,让我们逐一了解涉及的关键技术点。 1. **SpringBoot**: ...
2. 安装完成后也自动完成了PostgreSQL的基本配置,包括远程访问,监听地址等。 3. 一键升级PostgreSQL 4. 监控PostgreSQL进程运行资源占用 5. 重启PostgreSQL 6. 也可以通过"systemctl status/start/stop postgresql...
【PostgreSql本地备份为dump文件与恢复】备份脚本.bat文件
postgresQL数据库备份脚本,添加到任务计划中就可以备份数据库文件了。