设为首页 收藏本站
查看: 995|回复: 0

使用shell备份redis并上传到ftp服务器

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2015-4-30 08:23:51 | 显示全部楼层 |阅读模式
cat redis.sh
#!/bin/bash
#--------------------------------------------------  
#Created:2015-04-29
#Author:jimmygong
#Mail:jimmygong@taomee.com
#Function:backup redis && ftp
#Version:1.0
#--------------------------------------------------
if [[ `id -u` -ne 0 ]]
then
    echo "sctipts need root"
    exit 1
fi
set -o nounset
localip=`ifconfig eth0|awk '/inet addr:/'|awk -F: '{print $2}'|awk -F" " '{print $1}'`
currdate=`date +%Y%m%d`
redisdir="/var/lib/redis"
redisfile="dump.rdb"
redisport="6379"
rediscmd="/usr/bin/redis-cli"
redisbackupdir="/opt/redisbackup/${currdate}"
redisbackuplog="/opt/redisbackuplog/"
targz="${localip}.${redisfile}.tar.gz"
ftphost="10.1.10.133"
ftpport="21"
ftpuser="ftpup"
ftppass="ftpup"
[[ -d ${redisbackupdir} ]] || mkdir -p ${redisbackupdir}
[[ -e /usr/bin/nmap ]] || apt-get -y install nmap --force-yes > /dev/null 2>&1
echosucc ()
{
    echo "Ok"
}
echofail ()
{
    echo "Fail"
    exit 1
}
function echoresult ()
{
    if [[ $? == '0' ]]
    then
        echosucc
    else
        echofail
    fi
}
function exportlog ()
{
    [[ -d ${redisbackuplog} ]] || mkdir -p ${redisbackuplog}
    logfile=${redisbackuplog}/${currdate}.${localip}.log
    exec > ${logfile} 2>&1
}
function bgsave ()
{
    echo -n "Bgsave:"
    ${rediscmd} -h ${localip} -p ${redisport} bgsave > /dev/null 2>&1
    echoresult
}
function backup ()
{
    echo -n "Targz:"
    cd ${redisdir} && cp ${redisdir}/${redisfile} ${redisbackupdir}
    cd ${redisbackupdir} && tar czf ${targz} ${redisfile} && rm -f ${redisbackupdir}/${redisfile}
    echoresult
}
function ftpcheck ()
{
    echo -n "FtpServer:"
    nmaphost=`nmap ${ftphost} -p ${ftpport}|grep "open"|wc -l`
    [[ ${nmaphost} -eq 1 ]] && echo "Ok"
}
function ftpcmd ()
{
    file=$1
    ftp -in<<EOF
    open ${ftphost}
    user ${ftpuser} ${ftppass}
    cd 11
    mkdir ${currdate}
    cd ${currdate}
    mkdir ${localip}
    cd ${localip}
    mput ${file}
    quit
EOF
}
function ftpputfile ()
{
    ftpcheck
    echo -n "FtpFile:"
    cd ${redisbackupdir}
    for i in `ls`
    do
        ftpcmd $i
    done
    echoresult
}
function delete ()
{
    echo -n "Delete:"
    cd ${redisbackupdir} && find -name "*.tar.gz" -mtime +30|xargs -i {} rm -f
    echoresult
}
function ftpputlog ()
{
    cd ${redisbackuplog}
    ftp -in<<EOF
    open ${ftphost}
    user ${ftpuser} ${ftppass}
    cd 11
    mkdir log
    cd log
    mput ${currdate}*.log
    quit
EOF
}

exportlog
bgsave
backup
ftpputfile
delete
ftpputlog
exit 0
=============================说明=============================================
bash redis.sh
执行结果
ll /opt/redisbackup/20150429/
-rw-r--r-- 1 root root 148 2015-04-29 23:20 10.1.10.133.dump.rdb.tar.gz
ll /opt/redisbackuplog/
-rw-r--r-- 1 root root 53 2015-04-29 23:20 20150429.10.1.10.133.log
cat /opt/redisbackuplog/20150429.10.1.10.133.log
Bgsave:Ok
Targz:Ok
FtpServer:Ok
FtpFile:Ok
Delete:Ok

ftp那边
ll /opt/backup/11/20150429/10.1.10.133/
total 4
-rw------- 1 ftpup ftpup 148 2015-04-29 23:20 10.1.10.133.dump.rdb.tar.gz
ll /opt/backup/11/
20150429/ log/      
cat /opt/backup/11/log/20150429.10.1.10.133.log
Bgsave:Ok
Targz:Ok
FtpServer:Ok
FtpFile:Ok
Delete:Ok

redis-cli -h 10.1.10.133 -p 6379
redis 10.1.10.133:6379>bgsave
Background saving started
在后台异步(Asynchronously)保存当前数据库的数据到磁盘。
BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,
原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
http://redisdoc.com/   #redis命令参考

因为需要测试脚本是否能正常备份 需要安装redis-server和ftp
redis-server(centos6.6)epel源上就有
redis.x86_64 2.4.10-1.el6 @epel
redis-server(debian5.0.1)
wget mirror.wh-stuttgart.net/apt-mirror/packages.dotdeb.org/dists/wheezy/redis/binary-amd64/redis-server_2.6.14-1~dotdeb.1_amd64.deb
proftpd(debian5.0.1)
安装apt-get -y install proftpd

cat /etc/redis/redis.conf|egrep -v "^#|^$" |egrep "port|dbfilename|dir"
port 6379
dbfilename dump.rdb
dir /var/lib/redis

shell的内置命令命令exec
exec > ${logfile} 2>&1

cat /etc/debian_version
5.0.1



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-62043-1-1.html 上篇帖子: linux shell 执行多个命令的几种方法 下篇帖子: shell中if条件字符串的比较 ftp服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表