一 摘要
本文主要介绍一套本地备份、跨机器备份、历史备份清理脚本,使用场景如数据库备份等
二 环境
linux 系列系统 基本都支持,个别命令可能需要微调。
2.1 实验环境
[root@localhost rsync]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
三 脚本介绍
介绍脚本主要功能模块及目录结构
3.1 脚本目录结构
[root@projun002 data]# cd scripts/
[root@projun002 scripts]# tree
.
├── backup
│ ├── backup_mysql.sh
│ └── backup_nginx.sh
├── delete
│ ├── delete_dockercompse.sh
│ ├── delete_jira.sh
│ ├── delete_mysql.sh
│ ├── delete_nginx.sh
│ └── deleteoldfile.sh
├── logs
│ ├── backup_mysql.INFO.2024-06-26.log
│ ├── backup_mysql.INFO.2024-06-27.log
└── rsync
├── push_rsync_devopsapp.sh
├── push_rsync_gitlabtar.sh
├── push_rsync_jira.sh
└── rsync_tools.sh
/scripts/backup/ 主要存放本机备份脚本;
/scripts/rsync/ 主要存放跨机备份脚本;
/scripts/delete/ 主要存放删除本机历史备份和日志文件脚本;
/scripts/logs/ 主要存放日志文件;
3.2 以备份mysql 为例介绍脚本及使用办法
3.2.1 /scripts/backup/backup_mysql.sh
该脚本里基于mysqldump 备份数据库,既可以备份基于容器部署的mysql,也可以部署基于rpm 包安装的数据库;
注意几点:备份好后,一定要验证是否能顺利恢复。
因为mysql 配置不同,备份命令也要基于自己的配置修改
比如default-character-set=utf8 ,您的库不是utf-8,那就要改了。
#!/bin/bash
# 数据库连接信息
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_USER="root"
DB_PASSWD="test"
# 时间格式化,如 20211216
DATE="`date +%Y%m%d%H%M%S`"
# 备份文件目录
DIR_BACKUP="/data/backup/devopsapp/mysqldata"
#备份应用
APP_NAME="mysql"
#脚本根目录
SCRIPT_DIR="/data/scripts/"
DIR_LOG="${SCRIPT_DIR}/logs"
FILE_LOG="${DIR_LOG}/backup_${APP_NAME}.INFO.`date +%F`.log"
# 备份数据库名
DATABASES=("jira mysql")
# mysql docker id
MYSQL_DOCKER_ID=`docker ps -a | grep devopsappmysql | awk '{print $1}'`
# 测试目录, 目录不存在则自动创建
# test -d ${DIR_LOG} || echo passwd | sudo -S mkdir -p ${DIR_LOG}
test -d ${DIR_LOG} || mkdir -p ${DIR_LOG}
test -d ${DIR_BACKUP} || mkdir -p ${DIR_BACKUP}
# ------------------- 2021-12-16_17:40:48 Start -------------------
echo -e "\n----------------- $(date +%F\ %T) Start -----------------"
echo -e "\n================= $(date +%F\ %T) Start =================" >> ${FILE_LOG}
# 遍历数据库名
for database in ${DATABASES[@]}; do
# 打印备份的数据库名
echo "----------- Current backup database: [ ${database} ] ------------"
echo "-------------- Backed-up database: [ ${database} ] --------------" >> ${FILE_LOG}
docker exec -i ${MYSQL_DOCKER_ID} sh -c " mysqldump --opt --single-transaction --master-data=2 --default-character-set=utf8 -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWD} -B ${database} | gzip > ${DIR_BACKUP}/mysqlbackup_${database}_${DATE}.sql.gz"
done
# 备份指定的数据库
# mysqldump --opt --single-transaction --master-data=2 --default-character-set=utf8 -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWD} -B ${DATABASES} | gzip > ${DIR_BACKUP}/mysql_backup_${DATE}.sql.gz
# docker 版本
#docker exec -i ${MYSQL_DOCKER_ID} sh -c " mysqldump --opt --single-transaction --master-data=2 --default-character-set=utf8 -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWD} -B ${DATABASES} | gzip > ${DIR_BACKUP}/mysql_backup_${DATE}.sql.gz"
# # 备份全部数据库
# mysqldump --opt --single-transaction --master-data=2 --default-character-set=utf8 -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWD} -A | gzip > ${DIR_BACKUP}/mysql_backup_${DATE}.sql.gz
echo "------- Backup file