每天一次dump数据库并压缩的shell脚本

#! /bin/sh


DBSERVER=192.168.1.236
USER=xxx
PASS=xxx
OUTPUT_DIR=data
OLD_DIR=old_data
LOG_FILE=log_dump.txt


#默认的数据库
default_all_dbs=('open_account'  'xx'  'xxxx' 'xxxxx' 'xxxxxx' 'xxxxxxxxxx' 'xxxxxxx')


MYSQLDUMPBIN_PATH='/software/mysql-5.6/bin/mysqldump'


function log_message()
{
    echo $1 $2 $3 >> ${LOG_FILE}
    #echo $1 $2 $3 
}


function dump_db()
{
    DATABASE=$1
    FILE=${DATABASE}.`date +"%Y%m%d"`.sql
    log_message "begin to dump db ${DATABASE} to ${FILE}.gz ."
    #use this command for a database server on remote.
    ${MYSQLDUMPBIN_PATH} --opt --protocol=TCP --user=${USER} --password=${PASS} --host=${DBSERVER} ${DATABASE} > ${FILE}
    gzip $FILE
    #log_message "${FILE}.gz was created."
    #ls -al ${FILE}.gz
}


function dump_table()
{
    DATABASE=$1
    TABLE=$2
    FILE=${DATABASE}.${TABLE}.`date +"%Y%m%d"`.sql
    log_message "begin to dump table ${TABLE} of db ${DATABASE} to ${FILE}.gz ."
    #use this command for a database server on remote.
    ${MYSQLDUMPBIN_PATH} --opt --protocol=TCP --user=${USER} --password=${PASS} --host=${DBSERVER} ${DATABASE} ${TABLE} > ${FILE}
    gzip $FILE
    #log_message "${FILE}.gz was created."
    #ls -al ${FILE}.gz
}




while true
do
    begin_time=`date +%s`
    log_message "Start dumpping:" "`date +'%Y-%m-%d %H:%M:%S'`" ".............................."


    if [ ! -d "$OLD_DIR" ]; then  
        mkdir ${OLD_DIR}
    fi  


    if [ ! -d "$OUTPUT_DIR" ]; then  
        mkdir ${OUTPUT_DIR}
    fi  


    rm -fr ${OLD_DIR}/*.sql.gz 
    mv ${OUTPUT_DIR}/*.sql.gz ${OLD_DIR} 


    #文件名本身是第0个参数,但不算在总参数个数里面
    if [ $# == 0 ] ; then
        log_message "Usage: sh dump.sh db default or sh dump.sh db db1 db2 or sh dump.sh table dbname table1 table2..." 
        exit 1 ;
    fi




    if [ $1 == "db" ]; then
        log_message "will dump dbs"
        if [ $2 == "default" ];then
            log_message "will dump all default dbs"
            for db in "${default_all_dbs[@]}"
            do
                dump_db $db
            done
        else
            log_message "will dump passed in dbs"
            i=1
            begin=2
            for db in "$@"
            do
                if [ "${i}" -ge "${begin}" ]; then
                        dump_db $db
                fi
                let i++
            done
        fi


    elif [ $1 == "table" ]; then
        db=$2
        log_message "will dump tables in db $db"
        i=1
        begin=3
        for table in "$@"
        do
            if [ "${i}" -ge "${begin}" ]; then
                    dump_table $db $table
            fi
            let i++
        done


    else
        log_message "Usage: sh dump.sh db default or sh dump.sh db db1 db2 or sh dump.sh table dbname table1 table2..." 
        exit 1 ;
    fi


    mv *.sql.gz ${OUTPUT_DIR}


    finish_time=`date +%s`
    log_message "Finish dumpping:" "`date +'%Y-%m-%d %H:%M:%S'`"


    seconds_cost=$[ finish_time - begin_time ]
    log_message "Total cost seconds:" "${seconds_cost}"
    log_message ""


    sleep 86400
done


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值