您的位置:首页 > 数据库 > Redis

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

2018-07-17 20:45 162 查看

一 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左边的键,常用来括住包含多条命令的语句。使用如下:

[code]result=`redis-cli -p port -a password bgsave`

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

2、awk命令详解

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

三 备份脚本

完整脚本如下:

[code]#!/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"

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: