为了安全起见,我们每天都需要备份数据库,但是备份数据库的时间往往是在凌晨左右,大家都休息,没人使用的时候,这样我们就需要linux系统实现自动备份,即定时自动执行脚本。但是我们又不能让所有的备份一直保留,所以我们还需要删除去古老的备份。(我的操作系统版本是Linux ip-172-16-3-158 3.10.0-327.13.1.el7.x86_64,centos7)

首先,我们说linux系统的定时自动备份。据说有多种方法,我在这里使用的方法是,直接添加配置文件。我们在 /etc/crontab文件下,添加命令即可,

上面的解释很清楚,第一个参数是分钟(0 - 59),第二个参数是 小时 (0 - 23 ),第三个参数是每个月的哪一天 (0 - 31 ),第四个参数是一年中的哪一个月 (1 - 12),第五个参数是每周的周几( 0 -6) 0代表星期天(西方人认为星期天是一周的开始)。后面就是执行命令的角色,和被执行的命令。

下面我们开始编辑数据库备份脚本,(这里我们备份的数据库是postgresql的数据库)

数据库的备份命令很简单,就是

pg_dump -h IPADRESS -U user database > database.sql

这样会出现密码提示,妨碍我们执行自动化脚本,所以我在这里使用了下面的方法,在用户目录下,编辑.pgpass文件,他的格式如下

hostname:port:database:username:password

编辑好之后保存,修改权限为600
这样我们执行语句 pg_dump -h IPADRESS -U user database -w > database.sql,就不会有密码提示了 因为要每天都要备份,所以备份文件的命名是很重要的,我们按照习惯用时间作为命名
DATE=`date "+%Y-%m-%d-%H-%M-%S"` 同样,因为备份只需要保留几天的就可以了,所以我们需要将时间比较久的备份删除掉,这里我们采用的方法是
find /backup_db/ -mtime +4 -name "*tar.gz" -exec rm -rf {} \;
意思是将4天前的/backup_db/目录下,以。.tar.gz结尾的文件,全部删除掉。这里解释下 -mtime +4 ,这个参数,
+4表示的完整的时间4天,如果我们参数值写的是 +0 ,那么从昨天这个时候到现在这个时候都是在0以内,比如现在是下午四点钟,那么昨天下午16:00:01时的文件就不在它的查询
范围内,而昨天下午 15:59:59的文件就在它的查询范围内。所以
find /backup_db/ -mtime +0 -name "*tar.gz" -exec rm -rf {} \;表示昨天下午16:00:00之前以.tar.gz结尾的文件,我们会执行删除操作,保留一天以内的。同理,
find /backup_db/ -mtime +4 -name "*tar.gz" -exec rm -rf {} \;表示我们会保留五天以内的以.tar.gz结尾的文件,而将之前的文件全部删除。当然,不以.tar.gz结尾的文件是不在删除范围内的。
好了,这个就是我做的全部过程。

shell脚本实现数据库自动备份和删除备份的更多相关文章

  1. Centos上通过shell脚本实现数据库备份和还原

    最近有个这样的需求,通过shell脚本实现数据库备份还原,最后通过网上查询自己测试实现,将脚本分享给大家 1.数据库备份脚本 #!/bin/bash ds=`` list=`date +%Y`/`da ...

  2. liunx文件定期本地备份、异地备份、删除备份脚本

    导航 一.背景二.依赖功能介绍三.本地备份脚本四.异地备份脚本五.定期删除备份六.github脚本地址 - - - - - - - - - - 分割线 - - - - - - - - - - 一.背景 ...

  3. Saiku数据库迁移后的刷新脚本-Shell脚本读取数据库中的数据(二十三)

    Saiku数据库迁移后的刷新脚本 之前有谈过对saiku中的数据进行刷新,因为saiku默认会从缓存中查询数据,但是配置不使用缓存又会效率低下... 所以这里就需要做一个数据刷新,每次ETL之后都需要 ...

  4. 使用shell脚本生成数据库markdown文档

    学习shell脚本编程的一次实践,通过shell脚本生成数据库的markdown文档,代码如下: HOST=xxxxxx PORT=xxxx USER="xxxxx" PASSWO ...

  5. linux shell简单实现数据库自动备份

    以centos系统为例,实现数据库自动备份.1.写一个shell: 12 #! /bin/bashmysqldump -cp --user=root --password='123' dbName | ...

  6. Dockerfile 构建后端springboot应用并用shell脚本实现jenkins自动构建

    Dockerfile 文件构建docker镜像 FROM centos MAINTAINER zh*****eng "z*******ch.cn" ENV LANG en_US.U ...

  7. Dockerfile 构建后端tomcat应用并用shell脚本实现jenkins自动构建

    Dockerfile 文件构建docker镜像 FROM centos MAINTAINER zhaoweifeng "zh******tech.cn" ENV LANG en_U ...

  8. Dockerfile 构建前端nginx应用并用shell脚本实现jenkins自动构建

    Dockerfile 文件构建docker镜像 FROM centos MAINTAINER zh********h.cn RUN rm -f /etc/nginx/nginx.conf COPY n ...

  9. Shell 脚本操作数据库实战

    安装mariadb 数据库  (默认没有密码,直接mysql即可进入数据库管理控制台) yum install mariadb mariadb-server mariadb-libs -y syste ...

随机推荐

  1. pt-online-schema-change 实例

    pt-pmp (http://www.cnblogs.com/ivictor/p/6012183.html) pt-online-schema-change (http://blog.csdn.net ...

  2. VS2010环境下C++工程相关问题汇总

    1.链接其他库调试时产生告警: warning LNK4099: 未找到 PDB“vc100.pdb” 解决方案:属性 -> C/C++ -> 输出文件 -> 程序数据库文件名 -& ...

  3. [转]Dll注入经典方法完整版

    Pnig0s1992:算是复习了,最经典的教科书式的Dll注入. 总结一下基本的注入过程,分注入和卸载 注入Dll: 1,OpenProcess获得要注入进程的句柄 2,VirtualAllocEx在 ...

  4. yii2 使用composer安装

    composer global require "fxp/composer-asset-plugin:~1.0.0" composer create-project --prefe ...

  5. 【巩固】JS获取时间的一些基础知识

    就是一个new Date()对象,要注意的有以下几点; 直接给oDate对象设置年月日时分秒的时候要分成两步,oDate.setFullYear()接受三个参数分别是年月日,注意月份是从0开始计一月的 ...

  6. 51nod 最近刷题 简要题解

    51nod 1564 由于数据是随机的,可以证明,对于每一个数,向左或右找比它小的数,长度是logn级别的 考虑枚举最大值 注意,对于每一个最大值,如果直接用2个循环枚举左右端点的话,理论是lognl ...

  7. 全面了解 Linux 服务器 - 4. 查看 Linux 系统的平均负载

    可使用 uptime.top.w 命令来查看. 以 uptime 命令为例: liuqian@ubuntu:~$ uptime 17:31:26 up 7:27, 2 users, load aver ...

  8. 源码解读—HashTable

    在上一篇学习过HashMap(源码解读—HashMap)之后对hashTable也产生了兴趣,随即便把hashTable的源码看了一下.和hashMap类似,但是也有不同之处. public clas ...

  9. Bellman-Ford最短路径

    对于前面说到的最短路径的求解方法,不能解决负权边的情况,而Bellman-Ford却可以 共有n个顶点,m条边,每次输入u[i],v[i],w[i],代表从u[i]到v[i]的距离是w[i],对于所有 ...

  10. [oracle] update和merge语句的几点写法

    1.update t2 set parentid=(select ownerid from t1 where t1.id=t2.id); 2. update tb_client_win_lost_re ...