本文的写作原因:对实际客户需求的一次小总结,顺带做一次笔记

数据库备份方案起因

任何数据库都需要备份,备份数据是维护数据库必不可少的操作。

数据库备份常见的应用场景:

  1. 硬件故障造成数据库部分数据或全部数据丢失
  2. 人为操作失误造成某些数据被误操作
  3. 软件 BUG 造成部分数据或全部数据丢失
  4. ……

对于上述场景还有很多,公司里面让我做数据库备份就以上三个原因(只针对我们公司的业务来说)

数据库备份的实际操作

测试环境:centos 7docker 20.10.12postgis/postgis:13-master

老板要求数据库备份的这个方案最好能跟着数据库启动自动配置,不需要人工配置,且能够清除历史备份(这个算基本需求)

注意:下面所提到的脚本文件都放在同一个目录下

一、选择数据库备份时间

在业务闲时,设置定时任务crontab定时任务(每日凌晨),全量备份,这里查看过pgsql的官方文档最后决定使用pg_basebackup的命令来实现,其他方式看了一下不太适合我这个菜鸡。

二、编写数据库备份脚本

数据库备份及删除历史备份,脚本如下(backup.sh)

#!/bin/bash#利用docker命令向容器打入命令
docker exec --user postgres postgis pg_basebackup  -F t -z -R -D /data/backup#做个异常识别,不然长时间备份不成功会把以前的备份删掉
if [ $? -ne 0 ]; thenecho "failed to backup"exit 1
elseecho "succeed to backup"
fi#移动备份文件(从docker映射路径移到其他地方)
mv /data/db/postgis/data/backup /data/postgresql/backup/data/$(date +%Y%m%d%H%M%S)#sevendays_time=$(date -d -7days '+%Y%m%d')
#删除超过七天的文件
cd /data/postgresql/backup/data
rm -rf $(date -d -7days '+%Y%m%d')*

三、将定时任务配置到服务器的定时任务上

将backup.sh的操作任务配置到crontab上,脚本如下(confBackup.sh)

#!/bin/bashmyShell=backup.sh
filePath=$(cd "$(dirname "$0")";pwd)
echo $filePath
echo $myShellcrontab -l > cron
number=`grep -n "$myShell" cron | cut -d ":" -f 1`
aa=$number
echo $aaif [ -z $aa ];
then
echo "该任务不存在,将添加"
echo '* 0 * * * '$filePath'/'$myShell'' >> cron
crontab cron
rm -f cron
else
echo "该任务已经存在,将会先删除再添加"
sed -i '/'$myShell'/d' cron
echo '* 0 * * * '$filePath'/'$myShell'' >> cron
crontab cron
rm -f cron
fi

四、docker启动数据库脚本

其余docker的yml配置文件省略,编写pgsql的启动命令,脚本如下(start.sh)

#!/bin/bashdocker-compose -f postgis.yml up -d./confBackup.sh

结束

这个自动备份脚本花了我半天时间研究,其中一个最坑的就是我在脚本上加了-it,这个-it命令是为了开启容器终端,你必须指定参数,但是我是在脚本执行,所以导致我的脚本只能手动运行(backup.sh),不能在定时任务执行,坑的命令:docker exec -it --user postgres postgis pg_basebackup -F t -z -R -D /data/backup

参考资料:
定时任务:https://www.runoob.com/w3cnote/linux-crontab-tasks.html
数据库备份:http://www.postgres.cn/docs/9.4/app-pgbasebackup.html
封面图片来自:深圳卫健委

pgsql数据库自动备份相关推荐

  1. pgsql数据库自动备份、删除及恢复

    参考文章:点此跳转 第一部分:数据库备份与删除 步骤一:编写备份脚本 mkdir /home/postgresql_backup cd /home/postgresql_backup vim pgsq ...

  2. 【PostgreSQL实战】之实现数据库自动备份

    [原创,转载请说明]         我们在开发过程中,对于数据的要求格外严格,往往要做到数据库的备份.本文基于现实案例,实现Postgresql数据库备份,实现每日定时备份的功能.          ...

  3. Linux oracle数据库自动备份自动压缩脚本代码

    Linux oracle数据库自动备份自动压缩脚本代码 Linux oracle数据库备份完成后可以自动压缩脚本代码. 复制代码代码如下: #!/bin/bash #backup.sh #edit: ...

  4. 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)

    挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 原文:挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 挺好用的SQLSE ...

  5. oracle数据库自动备份

    oracle数据库自动备份 环境:windows server2008操作系统,oracle 10.2.0数据库 工具:windows命令窗口 ,windows任务计划 命令:exp  profile ...

  6. mysql学习之旅-数据库自动备份-测试环境搭建

    #终于知道什么叫不会走先会跑了,刚开始接触第一个case就是数据库自动备份,我可是都没安装过啊?!   发完牢骚开始干活 首先,因为业务已经上线,不能随便动,先搭建测试环境吧 规划一下 版本:mysq ...

  7. 数据库自动备份还原成新库脚本

    数据库自动备份还原成新库脚本 BACKUP DATABASE [源数据库名] TO DISK = N'G:\testbackup.bak' WITH COMPRESSION,NOUNLOAD , NA ...

  8. delphi Oracle导出多个表,Oracle数据库自动备份工具(Delphi源码)

    Oracle数据库自动备份工具(Delphi源码) 下载地址:http://www.blogjava.net/Files/96sd2/OraSvr.rar 『OracleBackupService』简 ...

  9. db2数据备份到mysql_DB2数据库自动备份详解

    DB2数据库自动备份详解 由脱机备份转换为联机备份: 在db2CMD下执行 1.连接需要备份的数据库:db2 connect to数据库名称 2.修改自动数据库备份(AUTO_DB_BACKUP)参数 ...

最新文章

  1. 没有导师的指导,研究生如何阅读文献、提出创见、写论文?
  2. 车牌识别--Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline
  3. VScode修改快捷键,快捷键恢复默认设置,添加或取消注释
  4. IIS6下PHP的ISAPI和FastCGI性能比较 期待ii7
  5. 趣学python3(10)-函数注释方法
  6. 【NLP】GitHub 上有哪些有趣的关于 NLP 的Python项目?
  7. docker oracle 11g
  8. psychopy 与脑电打码 eeg
  9. Adobe Illustrator CS6 绿色简体中文版下载地址
  10. 微信支付中证书的存放目录及其路径写法
  11. oracle 设置自增序列
  12. 计算机二级excel设置宏,Excel2013中为宏指定快捷键的方法
  13. 平平无奇的营销小天才——ChatGPT
  14. 国产数据库mysql_国产的数据库都有哪些?
  15. 弄明白CMS和G1,就靠这一篇了
  16. MicroBlaze控制LED入门【史上最详细】
  17. C++软件开发中“时间”相关操作全攻略
  18. el-select如何选择整个对象item
  19. 用IDEA构建第一个springBoot工程
  20. AltiumDesigner 19软件安装步骤

热门文章

  1. 超好用的5款免费微信小程序!小程序也有大智慧,建议收藏
  2. RaycastHit了解
  3. yaffs文件系统测试
  4. java 冒泡排序算法优化
  5. 如何简单制作自己想要的GeoJSON地理信息文件
  6. Spring Boot 进阶,Spring Boot面试题高频出处
  7. 重学python-1
  8. 【转载】机器学习计算距离和相似度的方法
  9. java 蛋糕_1263: 你会做蛋糕吗?(Java)
  10. pc 端 TIM双击无法启动解决办法