备份redis服务并ftp上传(shell)

一、基础环境说明
1、版本
cat /etc/debian_version 
5.0.1

2、vsftpd和redis-server安装
1)下载redis-server的deb包
axel -n 10 http://mirror.wh-stuttgart.net/apt-mirror/packages.dotdeb.org/dists/wheezy/redis/binary-amd64/redis-server_2.6.14-1~dotdeb.1_amd64.deb
2)安装redis-server
dpkg -i redis-server_2.6.14-1~dotdeb.1_amd64.deb
3)安装vsftpd
apt-get -y install vsftpd

3、redis部分配置信息
cat /etc/redis/redis.conf|egrep -v "^#|^$" |egrep "port|dbfilename|dir"
port 6379
dbfilename dump.rdb
dir /var/lib/redis

4、redis命令参考
http://redisdoc.com/

5、ip
1)本机ip
10.1.10.133
2)ftp的ip
10.1.10.133 

二、shell脚本
#!/bin/bash
#--------------------------------------------------  
#Created:2015-04-29
#Author:jimmygong
#Mail:[email protected]
#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/
-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

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


你可能感兴趣的:(redis,shell,脚本备份)