仅需要修改变量值 变量值需要根据实际修改
#!/bin/bash
# 数据库类型,不同类型需要修改
DATABASE_TYPE="MySQL"
# 配置部分,需要修改
MYSQL_USER="数据库用户名"
MYSQL_PASSWORD="数据库密码"
MYSQL_HOST="数据库所在主机"
# 需要备份的数据库列表,多个数据库使用空格隔开,例如("database1" "database2")
MYSQL_DATABASES=("database1")
# 备份文件存放路径,本地路径,根据需求修改
BACKUP_DIR="/home/backup_user/${MYSQL_HOST}_${DATABASE_TYPE}"
LOG_FILE="$BACKUP_DIR/backup.log"
# 远程服务器配置,备份服务器根据需求修改
REMOTE_USER="备份机用户名"
REMOTE_HOST="备份机IP"
REMOTE_DIR="/home/db_backup/${MYSQL_HOST}-${DATABASE_TYPE}"
# 创建远程备份目录(如果不存在)
ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p ${REMOTE_DIR}"
# 创建本地备份目录(如果不存在)
mkdir -p $BACKUP_DIR
# 循环遍历每个数据库进行备份
for DB in "${MYSQL_DATABASES[@]}"; do
BACKUP_FILE="$BACKUP_DIR/$DB-$(date +%F-%H%M%S).sql"
echo "[$(date)] 开始备份数据库 $DB..." | tee -a $LOG_FILE
mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD -h $MYSQL_HOST $DB > $BACKUP_FILE
if [ $? -eq 0 ]; then
echo "[$(date)] 数据库 $DB 备份成功,文件位置:$BACKUP_FILE" | tee -a $LOG_FILE
else
echo "[$(date)] 数据库 $DB 备份失败" | tee -a $LOG_FILE
continue
fi
# 传输备份文件到远程服务器,这一步需要提前做ssh免密
echo "[$(date)] 开始传输备份文件 $BACKUP_FILE 到远程服务器 $REMOTE_HOST..." | tee -a $LOG_FILE
scp $BACKUP_FILE $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
if [ $? -eq 0 ]; then
echo "[$(date)] 备份文件 $BACKUP_FILE 传输成功" | tee -a $LOG_FILE
else
echo "[$(date)] 备份文件 $BACKUP_FILE 传输失败" | tee -a $LOG_FILE
fi
# 删除本地备份文件(可选)
# rm $BACKUP_FILE
done
if [ $? -eq 0 ];then
echo "[$(date)] 所有数据库备份流程完成" | tee -a $LOG_FILE
else
echo "[$(date)] 数据库备份流程执行失败" | tee -a $LOG_FILE && exit 99
fi