您的位置:首页 > 运维架构 > Shell

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

2017-07-03 15:21 253 查看
#! /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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell dump mysql