Backup middleware
#!/bin/bash
########
# backup mysql db
# auther: cmzhu
########
## public parm
NOW_DATE_STR=$(date +"%Y%m%d%H%M%S")
# Static Parm
# mysql
MYSQL_USER=root
MYSQL_PASSWD=1234
MYSQL_HOST=172.17.0.5
# mongo
MONGO_USER=work_rw
MONGO_PASSWORD=Abcd1234!
MONGO_HOST=10.224.0.3:27017,10.224.0.2:27017,10.224.0.1:27017
MONGO_DATABASE=(
admin
)
# volumes
BACKUP_BASE_PATH=/opt/backup-middleware
MYSQL_BACKUP_DIR=${BACKUP_BASE_PATH}/mysql-backup
MONGO_BACKUP_DIR=${BACKUP_BASE_PATH}/mongo-backup
ETCD_BACKUP_DIR=${BACKUP_BASE_PATH}/etcd-backup
mkdir -p ${MONGO_BACKUP_DIR}
mkdir -p ${ETCD_BACKUP_DIR}
# extra db
MYSQL_EXTRA_DB=(
performance_schema
information_schema
sys
)
## 公共函数
function job_success(){
echo $(date +"%Y-%m-%d %H:%M:%S") - $@
echo
exit 0
}
function job_failed(){
echo $(date +"%Y-%m-%d %H:%M:%S") - $@
echo
exit 1
}
function job_execution(){
echo $(date +"%Y-%m-%d %H:%M:%S") - $@
echo
}
function usage() {
echo "用法: $0 {mongo|mysql|etcd [arg]}"
exit 1
}
function back_mysql(){
MYSQL_CMD=(
mysql
-u${MYSQL_USER}
-p${MYSQL_PASSWD}
-h${MYSQL_HOST}
)
MYSQLDUMP_CMD=(
mysqldump
-u${MYSQL_USER}
-p${MYSQL_PASSWD}
-h${MYSQL_HOST}
)
# 检查 mysql 链接地址是否正常
"${MYSQL_CMD[@]}" -e "SELECT 1" 2>/dev/null
if [[ $? -ne 0 ]];then
job_failed ${MYSQL_USER} connection mysql server error!!
fi
if [ ! -d "${MYSQL_BACKUP_DIR}" ]; then
mkdir -p ${MYSQL_BACKUP_DIR}
job_execution create dir ${MYSQL_BACKUP_DIR} !!
fi
# 备份所有mysql 数据库
all_mysql_backup_db=$("${MYSQL_CMD[@]}" -e "SHOW DATABASES;" 2>/dev/null | grep -vE "^Database$|$(IFS=\|; echo "${MYSQL_EXTRA_DB[*]}")")
for db_name in ${all_mysql_backup_db[@]};do
job_execution start backup mysql database ${db_name}
"${MYSQLDUMP_CMD[@]}" $db_name | gzip > ${MYSQL_BACKUP_DIR}/mysql.${db_name}.${NOW_DATE_STR}.sql.gz
if [[ $? -eq 0 ]]; then
job_execution ${db_name} backup success !!!
else
job_failed ${db_name} backup failed !!!
fi
done
}
func backup_mongo(){
## check mongo login success
mongo \
--username ${MONGO_USER} \
--password ${MONGO_PASSWORD} \
--authenticationDatabase ${MONGO_DATABASE[0]} \
--host ${MONGO_HOST} \
--eval "db.runCommand({connectionStatus:1})" \
--quiet > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
job_failed ${MONGO_USER} connection mongo server error!!
fi
## check mongo backup dir already exist
if [ ! -d "${MONGO_BACKUP_DIR}" ];then
mkdir -p ${MONGO_BACKUP_DIR}
job_execution create dir ${MONGO_BACKUP_DIR}
fi
## backup mongo
for mongo-database in "${MONGO_DATABASE[@]}" ; do
job_execution start backup mongo database ${db_name}
if [ ! -d ${MONGO_BACKUP_DIR}/mongo.${mongo-database}.${NOW_DATE_STR} ]; then
mkdir -p ${MONGO_BACKUP_DIR}/mongo.${mongo-database}.${NOW_DATE_STR}
fi
mongodump \
--host ${MONGO_HOST} \
-u ${MONGO_USER} \
-p ${MONGO_PASSWORD} \
--authenticationDatabase ${mongo-database} \
--out ${MONGO_BACKUP_DIR}/mongo.${mongo-database}.${NOW_DATE_STR} \
--gzip
if [[ $? -eq 0 ]]; then
job_execution ${db_name} backup success !!!
else
job_failed ${db_name} backup failed !!!
fi
done
}
func backup_etcd(){
echo TODO!!!
}
function main(){
case "$1" in
mongo)
backup_mongo
;;
back_mysql)
back_mysql
;;
*)
usage
;;
esac
}
main $@