概述
一 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"
最后
以上就是专一翅膀为你收集整理的linux使用shell脚本定期备份redis的rdb文件的全部内容,希望文章能够帮你解决linux使用shell脚本定期备份redis的rdb文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复