forked from DevOps/deploy.stack
116 lines
2.9 KiB
Bash
116 lines
2.9 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# @author: cnphpbb@hotmail.com
|
||
|
|
# @date: 2024-08-28
|
||
|
|
# @desc: 备份数据库
|
||
|
|
## 备份数据库
|
||
|
|
|
||
|
|
## base
|
||
|
|
TOYEAR=$(date "+%Y")
|
||
|
|
TOMONTH=$(date "+%Y%m")
|
||
|
|
TODATE=$(date "+%Y%m%d")
|
||
|
|
NOWDATE=$(date "+%Y%m%d-%H%M%S")
|
||
|
|
BACKDIR=/data/backup/db_backs # 备份目录 请按照实际情况修改
|
||
|
|
TARLOGDIR=/data/backup/db_tar_logs # 备份日志目录 请按照实际情况修改
|
||
|
|
DAYDIR=${BACKDIR}/${TOMONTH}/${TODATE}
|
||
|
|
BACKLOGSDIR=${TARLOGDIR}/${TOMONTH}/logs/${TODATE}
|
||
|
|
BACKTARDIR=${TARLOGDIR}/${TOMONTH}/db_tars
|
||
|
|
LOGFILE=${BACKLOGSDIR}/db-Dump.${NOWDATE}.log
|
||
|
|
BACKSQLFILE=""
|
||
|
|
FileSize=0
|
||
|
|
|
||
|
|
## cmd
|
||
|
|
MYSQLDUMP='/usr/local/mysql/bin/mysqldump' # 请按照实际情况修改
|
||
|
|
|
||
|
|
## mysql
|
||
|
|
PARAS=' --set-gtid-purged=OFF --single-transaction --triggers --routines --events '
|
||
|
|
USERNAME=${MYSQL_USER}
|
||
|
|
PASSWORD=${MYSQL_PASS}
|
||
|
|
HOST=${MYSQL_HOST}
|
||
|
|
|
||
|
|
###
|
||
|
|
if [ ! -d "${BACKLOGSDIR}" ]; then
|
||
|
|
mkdir -p ${BACKLOGSDIR}
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ ! -d "${BACKTARDIR}" ]; then
|
||
|
|
mkdir -p ${BACKTARDIR}
|
||
|
|
fi
|
||
|
|
|
||
|
|
cd ${BACKDIR}
|
||
|
|
if [ ! -d "${DAYDIR}" ]; then
|
||
|
|
mkdir -vp "$DAYDIR" >> ${LOGFILE}
|
||
|
|
fi
|
||
|
|
|
||
|
|
curTime() {
|
||
|
|
NOWDATE=$(date "+%Y%m%d-%H%M%S")
|
||
|
|
}
|
||
|
|
|
||
|
|
getLogFile(){
|
||
|
|
curTime
|
||
|
|
LOGFILE=${BACKLOGSDIR}/db-Dump.${NOWDATE}.log
|
||
|
|
}
|
||
|
|
|
||
|
|
# dump databases
|
||
|
|
db_full_backup() {
|
||
|
|
curTime
|
||
|
|
BACKSQLFILE=${DAYDIR}/$1-${NOWDATE}.sql
|
||
|
|
$MYSQLDUMP -u${USERNAME} -p${PASSWORD} -h${HOST} ${PARAS} --databases $1 > ${BACKSQLFILE}
|
||
|
|
gzip ${BACKSQLFILE}
|
||
|
|
getLogFile
|
||
|
|
gzip ${BACKSQLFILE}
|
||
|
|
if [ $? -ne 0 ]; then
|
||
|
|
echo "$NOWDATE DB $1 backup is failed , please check it out!" >> ${LOGFILE}
|
||
|
|
else
|
||
|
|
echo "$NOWDATE DB $1 backup is success!" >> ${LOGFILE}
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# dump databases.tables
|
||
|
|
sigle_table_backup(){
|
||
|
|
curTime
|
||
|
|
BACKSQLFILE=${DAYDIR}/$1_$2-${NOWDATE}.sql
|
||
|
|
$MYSQLDUMP -u${USERNAME} -p${PASSWORD} -h${HOST} ${PARAS} --databases $1 --tables $2 > ${BACKSQLFILE}
|
||
|
|
gzip ${BACKSQLFILE}
|
||
|
|
getLogFile
|
||
|
|
if [ $? -ne 0 ]; then
|
||
|
|
echo "$NOWDATE Table $1_$2 backup is failed ,please check it out!" >> ${LOGFILE}
|
||
|
|
else
|
||
|
|
echo "$NOWDATE Table $1_$2 backup is success!" >> ${LOGFILE}
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
selfHelp() {
|
||
|
|
echo "dbDump.sh HELP "
|
||
|
|
echo "-----------------------------------"
|
||
|
|
echo "-h --help echo dbDump.sh HELP note"
|
||
|
|
echo
|
||
|
|
echo "\$1 databases 只备份数据库"
|
||
|
|
echo "exp:: dbDump.sh ppospro_member"
|
||
|
|
echo
|
||
|
|
echo "\$2 tables 只备份数据库.数据表"
|
||
|
|
echo "exp:: dbDump.sh ppospro_member ppospro_member"
|
||
|
|
echo
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
case $1 in
|
||
|
|
-h|--help|help )
|
||
|
|
selfHelp
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
#echo "参数个数为:$#"
|
||
|
|
if [ $# -eq 1 ]; then
|
||
|
|
echo "备份数据库 $1 Begin ..."
|
||
|
|
db_full_backup $1
|
||
|
|
FileSize=$(stat -c %s ${BACKSQLFILE})
|
||
|
|
echo "备份文件:: ${BACKSQLFILE} ${FileSize} bytes."
|
||
|
|
echo "备份数据库 $1 End ..."
|
||
|
|
else
|
||
|
|
echo "备份数据库 $1 $2 Begin ..."
|
||
|
|
sigle_table_backup $1 $2
|
||
|
|
FileSize=$(stat -c %s ${BACKSQLFILE})
|
||
|
|
echo "备份文件:: ${BACKSQLFILE} ${FileSize} bytes."
|
||
|
|
echo "备份数据库 $1 $2 End ..."
|
||
|
|
fi
|
||
|
|
;;
|
||
|
|
esac
|