forked from DevOps/deploy.stack
feat(mysql): 添加数据库备份脚本
新增dbDump.sh脚本,用于自动化备份MySQL数据库或指定表。脚本支持全库备份和单表备份,并生成相应的日志和压缩文件,便于后续管理和恢复。
This commit is contained in:
116
crontab/mysql/dbDump.sh
Normal file
116
crontab/mysql/dbDump.sh
Normal file
@@ -0,0 +1,116 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user