linux使用shell脚本定期备份redis的rdb文件

本文介绍了如何通过Redis的bgsave命令在后台异步保存数据库,并利用Linux shell脚本进行定期备份。内容包括bgsave命令的工作原理,通过`info persistence`查询Redis持久化状态,以及关注`rdb_bgsave_in_progress`字段来判断备份是否完成。此外,还提到了shell脚本中` `符号的作用和awk命令的链接。最后,给出了完整的备份脚本。

一 redis相关命令

1、bgsave命令

redis bgsave 命令用于在后台异步保存当前数据库的数据到磁盘。bgsave命令执行之后立即返回 OK ,然后 redis fork 出一个新子进程,原来的 redis进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。即:bgsave命令执行后,会创建一个进程,该进程会根据配置文件redis.conf的dir创建一个临时的rdb文件,等到redis内存的数据都存至这个临时的rdb文件之后,根据redis.conf的dbfilename选项重命名该rdb文件,也就是会覆盖原先的rdb文件。

2、info persistence信息查询命令

该命令会显示如下信息:

loading:0                                                    #服务器是否正在载入持久化文件
rdb_changes_since_last_save:28900855 #离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化
rdb_bgsave_in_progress:0                  #服务器是否正在创建rdb文件
rdb_last_save_time:1482358115        #离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件
rdb_last_bgsave_status:ok                   #最近一次rdb持久化是否成功
rdb_last_bgsave_time_sec:2                #最近一次成功生成rdb文件耗时秒数
rdb_current_bgsave_time_sec:-1        #如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数
aof_enabled:1                                          #是否开启了aof
aof_rewrite_in_progress:0                     #标识aof的rewrite操作是否在进行中
aof_rewrite_scheduled:0    

需要关注的rdb_bgsave_in_progress信息字段,redis在bgsave期间该字段为1。即1表示redis服务器正在进行bgsave,0表示没有在bgsave。可以利用rdb_bgsave_in_progress字段判断服务器是否已经完成bgsave备份。

二 脚本相关命令

1、` 符号

`符号是英文下数字1左边的键,常用来括住包含多条命令的语句。使用如下:

result=`redis-cli -p port -a password bgsave`

如果不使用该符号,上面这条语句会报错。因为如果没有 ` 符号bgsave会被当做一条linux命令执行,而bgsave是redis的操作命令。

2、awk命令详解

http://blog.chinaunix.net/uid-23302288-id-3785105.html

三 备份脚本

完整脚本如下:

#!/bin/bash
echo "start..."
sdate=$(date "+ %Y-%m-%d %H:%M:%S")
msg=`redis-cli -p $1 -a $2 bgsave`
echo "start bgsave time:$sdate"
result=`redis-cli -p $1 -a $2 info Persistence | grep "rdb_bgsave_in_progress" | awk -F":" '{print $2}'`
while [ `echo ${result} | awk -v tem="0" '{print($1>tem)? "1":"0"}'` -eq "1" ] ; do
    sleep 1
    result=`redis-cli -p $1 -a $2 info Persistence | grep "rdb_bgsave_in_progress" | awk -F":" '{print $2}'`
done
edate=$(date "+ %Y-%m-%d %H:%M:%S")
echo "end bgsave time:$edate"
echo "renaming rdb file..."
date=$(date "+ %Y%m%d")
mv "../db03/dump.rdb" "../db03/${date}.rdb"
echo "finish backup rdb file"
echo "end"

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值