mysql 备份与恢复
`备份脚本:
-rwxr-xr-x 1 root root 57 2015-05-18 17:27 databaselist.txt
YFCS-4-DBWAS:~/databackup/script # more backmysqldatabase.sh
!/bin/bash
####################################################
author:newhackerman
使用说明:
首先在备份脚本所在路径下新建文件databaselist.txt
并把要备份的数据库写入其中,一行一个数据库名称
执行: sh backmysqldatabase.sh &进行全库备份
可传入参数 用户名,密码,数据库名称,备份路径,主机,端口
usage:backmysqldatabase.sh backup test zentao /root/databackup localhost 3306&
传参进行单库备份,未传参则全库备份
####################################################
#############default parameter define##################
username="backup"
password="test"
databasename="zentao"
host="localhost"
port="3306"
backfiledir="/root/databackup"
Tdate=date "+%Y-%m-%d-%H"
Ttime=MARKDOWN_HASHcce46cdaa704d445e6fd494cfb8782deMARKDOWNHASH
backfiledirtmp="/root/databackup/tmp"
scriptdir="/root/databackup/script"
databaselist="${scriptdir}/databaselist.txt"
logfile="${backfiledirtmp}/back${Tdate}-${Ttime}.log"
backfilename="$databasename$back$Tdate.sql"
rundumppath=/usr/local/mysql/bin
#############default parameter define end##############
mysqldump -u${username} -p{password} --databases zentao -h localhost -P3306 --opt --single-transaction --skip-lock-tables >/root/databackup/zentao_back_20150203.sql
#############receive parameter ########################
#############receive parameter ########################
if [ $# -eq 1 ] ;then
username=$1
echo "$1"
elif [ $# -eq 2 ] ;then
username=$1
password=$2
echo "$1----$2"
elif [ $# -eq 3 ] ;then
username=$1
password=$2
databasename=$3
elif [ $# -eq 4 ] ;then
username=$1
password=$2
databasename=$3
backfiledir=$4
elif [ $# -eq 5 ] ;then
username=$1
password=$2
databasename=$3
backfiledir=$4
host=$5
elif [ $# -eq 6 ] ;then
username=$1
password=$2
databasename=$3
backfiledir=$4
host=$5
port=$6
elif [ $# -gt 6 ] ;then
echo "input parameters error please check it " >>${logfile}
else
echo "not input parameter use all default parameters !" >>${logfile}
fi
#############receive parameter end#####################
test ! -d ${backfiledirtmp} && mkdir -p ${backfiledirtmp}
test ! -d ${backfiledir} && mkdir -p ${backfiledir}
cd ${backfiledirtmp}
############Backup and compression function############
function BackDatabase(){
cd ${backfiledir}
logfile="${backfiledirtmp}/${databasename}_back_${Tdate}-${Ttime}.log"
echo date "+%Y-%m-%d %X"
>>${logfile}
echo "begin backup $databasename" >>${logfile}
$rundumppath/mysqldump -u${username} -p${password} -h${host} -P${port} --databases $databasename --opt --default-character-set=utf8 --single-transaction --skip-lock-tables >"$backfiledirtmp/${databasename}_back_${Tdate}.sql"
if [[ -f "${backfiledirtmp}/${databasename}_back_${Tdate}.sql" ]] && [[ -s "${backfiledirtmp}/${databasename}_back_${Tdate}.sql" ]]
then
echo date "+%Y-%m-%d %X"
>>${logfile}
echo " backup $databasename sucess!" >>${logfile}
#############bengin to compress #####################
if [ -f "${backfiledirtmp}/${databasename}_back_${Tdate}.sql" ]
then
gzip "${backfiledirtmp}/${databasename}_back_${Tdate}.sql"
if [ -f "${backfiledirtmp}/${databasename}_back_${Tdate}.sql.gz" ]
then
echo " compress $databasename sucess!" >>${logfile}
else
echo " compress $databasename fail !" >>${logfile}
fi
fi
#############compress end #####################
else
echo " backup ${databasename} fail!" >>${logfile}
#mail -s "data backup fail" zoujiayong@revenco.com >${logfile}
#mail -s "data backup fail" >>${logfile}
fi
#sleep 1
}
############Backup and compression function end #########
############run back start #########
if [ $# -eq 0 ] ;then
if [ ! -f "${databaselist}" ]
then
echo " ${databaselist} file not exsit!" >>${logfile}
exit
fi
cat $databaselist|while read databasename #一次读取一个数据库进行备份
do
logfile="${backfiledirtmp}/${databasename}back${Tdate}-${Ttime}.log"
BackDatabase; #循环进行备份
done
elif [ $# -lt 7 ] ;then
BackDatabase
else
echo "input parameter is error please check it!" >>${logfile}
fi
############run back end #########
#############ftp backdatefiles to backhost ##########
function CopyZfileToDhost(){
ftpuser=zjy
ftppass=zjy
ftphost="10.200.5.201"
ftpDdir="/home/zjy/jmeter"
ftpDdir="/backup/atp_qc_projectbak"
#backfiledirtmp="/root/databackup"
cd ${backfiledirtmp}
#sftp root@10.200.25.151 <
EOF
}
CopyZfileToDhost;
#############ftp end ##########
#############move backfile to backdir ##########
cd ${backfiledirtmp};
mv ${backfiledirtmp}/*.gz ${backfiledir}/
#############move end ##########
#############purge backdatefiles 8 days ago##########
cdate=8
find ${backfiledir} -mtime +${cdate} -name ".gz" >>"${logfile}";
find ${backfiledir} -mtime +${cdate} -name ".gz" -exec rm -rf {} \;
echo " delete ${cdate} backdatafile sucess!" >>"${logfile}"
#############purge end #####################
20 1 1,2,3,4,5,6 sh /root/databackup/script/backup_alldatabases.sh backup test zentao /root/databackup &
恢复脚本:
YFCS-4-DBWAS:~/databackup/script # more restore_mysql.sh
!/bin/bash
####################################################
author:zoujiayong
使用说明:
执行: sh restore_mysql.sh &进行恢复
可传入参数 用户名,密码,数据库名称,备份路径及文件
usage:restore_mysql.sh backup test zentao /root/databackup/zentao_back_2015-02-04-10.sql.gz
####################################################
#############default parameter define##################
username=backup
password=test
databasename="mysql"
host=localhost
port=3306
Tdate=date "+%Y-%m-%d-%H"
Ttime=date +%M-%S
backdata="/root/databackup/zentao_back_2015-02-04-10.sql.gz"
backfiledir=echo ${backdata%/*}
#截取路径
backfilename=echo ${backdata##*/}
#截取名称
backfiledirtmp="/root/databackup/tmp"
scriptdir=MARKDOWN_HASH9003d1df22eb4d3820015070385194c8MARKDOWNHASH
databaselist="${scriptdir}/databaselist.txt"
logfile="${backfiledirtmp}/restore${Tdate}-${Ttime}.log"
backfilename=$databasename$back$Tdate.sql
#############default parameter define end##############
#############receive parameter ########################
if [ $# -eq 1 ] ;then
username=$1
echo "$1"
elif [ $# -eq 2 ] ;then
username=$1
password=$2
echo "$1----$2"
elif [ $# -eq 3 ] ;then
username=$1
password=$2
databasename=$3
elif [ $# -eq 4 ] ;then
username=$1
password=$2
databasename=$3
backdata=$4
elif [ $# -eq 5 ] ;then
username=$1
password=$2
databasename=$3
backdata=$4
host=$5
elif [ $# -eq 6 ] ;then
username=$1
password=$2
databasename=$3
backdata=$4
host=$5
port=$6
elif [ $# -gt 6 ] ;then
echo "input parameters error please check it " >>${logfile}
else
echo "not input parameter use all default parameters !" >>${logfile}
fi
#############receive parameter end#####################
backfiledir=echo ${backdata%/*}
#截取路径
backfilename=echo ${backdata##*/}
#截取名称
if [ ! -d "${backfiledir}" ]
then
echo " ${backfiledir} dir not exsit!" >>${backfiledirtmp}/${databasename}restore${Tdate}-${Ttime}.log
fi
#############restore start #####################
cd ${backfiledir}
if [ ! -f "${backfilename}" ]
then
echo " ${backfilename} file not exsit!" >>${backfiledirtmp}/${databasename}restore${Tdate}-${Ttime}.log
exit
else
cp ${backfiledir}/${backfilename} ${backfiledirtmp}/
cd "${backfiledirtmp}/"
gunzip "${backfilename}"
unzipfile=echo ${backfilename%.*}
#获取解压缩后的文件名
fi
echo date "+%Y-%m-%d %X"
>>${backfiledirtmp}/${databasename}restore${Tdate}-${Ttime}.log
mysql -u${username} -p${password} -h${host} -P${port} -D $databasename --default-character-set=utf8 <"${unzipfile}"
rm "${unzipfile}"
echo date "+%Y-%m-%d %X"
>>${backfiledirtmp}/${databasename}restore${Tdate}-${Ttime}.log
echo " restore sucess" >>${backfiledirtmp}/${databasename}restore${Tdate}-${Ttime}.log
#############restore end#####################
YFCS-4-DBWAS:~/databackup/script # `