Mysql相关

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 # `

mysql 备份与恢复已关闭评论