使用crontab定时调度脚本做数据备份

以redis备份为例,rdb适合做冷备,我们只需要备份dump文件即可

  • 写crontab定时调度脚本做数据备份
  • 每小时都copy一份rdb的备份到一个目录中去,仅仅保留最近48小时的备份
  • 每天都保留一份当日的rdb的备份到一个目录中去,仅仅保留最近一个月的备份
  • 每次copy备份的时候都删除太久的备份文件
  • 每天晚上将当前服务器的所有数据备份,发送一份到远程的云服务器上
  1. 当前位置
  2. 创建copy目录并进入   mkdir copy && cd copy    这个目录主要放脚本
  3. 创建按小时备份的脚本 vi redis-rdb-copy-hourly.sh
  4. #!/bin/sh
    
    cur_date=`date +%Y%m%d%k`
    rm -rf /usr/local/docker/redis/snapshotting/$cur_date
    mkdir -p  /usr/local/docker/redis/snapshotting/$cur_date
    cp /usr/local/docker/redis/data/dump.rdb /usr/local/docker/redis/snapshotting/$cur_date
    cp /usr/local/docker/redis/data/appendonly.aof /usr/local/docker/redis/snapshotting/$cur_date
    
    del_date=`date -d -48hour +%Y%m%d%k`
    rm -rf /usr/local/docker/redis/snapshotting/$del_datel_date

     

  5. 赋予权限  chmod 777 redis-rdb-copy-hourly.sh

  6.  

    返回上一级目录并创建snapshotting文件夹    cd .. && mkdir snapshotting   用来存放备份文件

  7. 创建定时任务 crontab -e

  8. 0 * * * * sh /usr/local/docker/redis/copy/redis-rdb-copy-hourly.sh

    每小时的0分执行脚本

  9. 创建按天备份的脚本 cp redis-rdb-copy-hourly.sh redis-rdb-copy-daily.sh    
  10. vi redis-rdb-copy-daily.sh
  11. #!/bin/sh
    
    cur_date=`date +%Y%m%d`
    rm -rf /usr/local/docker/redis/snapshotting/$cur_date
    mkdir -p  /usr/local/docker/redis/snapshotting/$cur_date
    cp /usr/local/docker/redis/data/dump.rdb /usr/local/docker/redis/snapshotting/$cur_date
    cp /usr/local/docker/redis/data/appendonly.aof /usr/local/docker/redis/snapshotting/$cur_date
    
    del_date=`date -d -1month +%Y%m%d`
    rm -rf /usr/local/docker/redis/snapshotting/$del_date

     

  12. 添加定时任务  crontab -e

  13. 0 * * * * sh /usr/local/docker/redis/copy/redis-rdb-copy-hourly.sh
    0 0 * * * sh /usr/local/docker/redis/copy/redis-rdb-copy-daily.sh

    每天的0时0分执行脚本

  14. 可以手动执行 [root@localhost redis]# ./copy/redis-rdb-copy-daily.sh  进行测试 (先创建一个过期时间的目录)

数据恢复

当开启了appendonly=yes后,如果同时存在appendonly.aof和dump.rdb,redis会有限使用appendonly.aof进行恢复.

当redis自动生成的appendonly.aof和dump.rdb损坏或者丢失后,我们用备份的dump.rdb来进行恢复.

  1. 首先修改docker-compose.yml,去掉--appendonly yes
  2. 将备份文件复制到data目录 [root@localhost data]# cp ../snapshotting/2019102220/dump.rdb  .
  3. 启动docker-compose up -d
  4. 进入 docker exec -it redis-master bash
  5. 连接 redis-cli
  6. 查看键 keys *
  7. 此时数据已经通过dump.rdb恢复
  8. 下面要开启appendonly,  config get appendonly
  9. 退出,查看data目录有了appendonly.aof文件
  10. 停止 docker-compose down
  11. 修改docker-compose.yml,加上之前删除的--appendonly yes,然后再启动docker-compose.这样我们的数据也恢复了,redis也开启了appendonly. 之所以这样麻烦,是因为redis开启了appendonly后,如果data目录没有appendonly.aof文件,会自动创建一个空的appendonly.aof,然后用空的appendonly.aof去恢复数据,这样我们备份的dump.rdb没起作用.

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值