在我公司原来的备份脚本做的优化改动给大家分享下
使用时注意变量 ,配合cron执行脚本实现备份效果
备份指定数据库
#!/bin/bash
export PATH=/bin:/usr/bin:/usr/local/bin
TODAY=$(date +%Y-%m-%d)
date=$(date +%s)
echo "Backup date: $TODAY"
################## 这块根据自己情况修改 ########################
#备份路径
DB_BACKUP_PATH='/home/backup/'
#数据库地址
MYSQL_HOST='localhost'
#端口
MYSQL_PORT='3306'
#数据库用户
MYSQL_USER='root'
#数据库密码
MYSQL_PASSWORD='123456'
# 需要备份的库
DATABASES=( "data" "manage" "base" "engine" "cloud" "nacos")
#删除大于多少天的备份
BACKUP_RETAIN_DAYS=25
#################################################################
mkdir -p "$DB_BACKUP_PATH/$TODAY"
echo "Backup directory creation done. Start backup."
# 这里注意自己mysqldump的路径
for DATABASE_NAME in "${DATABASES[@]}"; do
/usr/local/mysql/bin/mysqldump --single-transaction -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$DATABASE_NAME" | gzip > "$DB_BACKUP_PATH/$TODAY/$DATABASE_NAME-$TODAY.sql.gz"
if [ $? -eq 0 ]; then
echo "Database backup for $DATABASE_NAME done"
else
echo "Error while backing up $DATABASE_NAME"
exit 1
fi
done
# 提前做免密
# ssh-keygen -t rsa 一直回车
# ssh-copy-id root@172.11.17.43 发送到远程服务器防止单点故障
for DATABASE_NAME in "${DATABASES[@]}"; do
scp -r "$DB_BACKUP_PATH/$TODAY" root@172.11.17.43:/home/backup
done
# 删除目录年龄大于25天的备份
find "$DB_BACKUP_PATH" -type d -mtime +$BACKUP_RETAIN_DAYS -exec rm -rf {} \;
MySQL全库备份
#!/bin/bash
# 设置数据库参数
DB_USER="root" # 数据库用户名
DB_PASSWORD="Vm123456" # 数据库密码
BACKUP_PATH="/backup/mysql-sit/mysql-33" # 本地备份文件存储路径
# 远程服务器参数
REMOTE_USER="root" # 远程服务器用户名
REMOTE_HOST="192.168.1.134" # 远程服务器IP地址或主机名
REMOTE_PATH="/backup/mysql/" # 远程服务器上的目标路径
# 当前日期,用于命名备份文件和目录
CURRENT_DATE=$(date +"%Y-%m-%d")
# 创建日期命名的本地备份目录
DATE_BACKUP_PATH="$BACKUP_PATH/$CURRENT_DATE"
mkdir -p "$DATE_BACKUP_PATH"
# 获取所有数据库列表,并循环备份每一个数据库
echo "正在检索数据库列表..."
mysql -u "$DB_USER" -p"$DB_PASSWORD" -e 'SHOW DATABASES;' | grep -Ev 'Database|information_schema|performance_schema|mysql|sys' | while read dbname; do
if [ -n "$dbname" ]; then
echo "正在备份数据库:$dbname"
mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --databases "$dbname" --routines --triggers | gzip > "$DATE_BACKUP_PATH/${dbname}_$CURRENT_DATE.sql.gz"
if [ $? -eq 0 ]; then
echo "数据库 $dbname 备份成功。"
else
echo "数据库 $dbname 备份失败。"
fi
fi
done
echo "所有数据库备份完成。"
# 使用scp将备份文件传输到远程服务器
echo "正在传输备份文件到远程服务器..."
scp "$DATE_BACKUP_PATH"/* "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
if [ $? -eq 0 ]; then
echo "备份文件成功传输到远程服务器。"
else
echo "备份文件传输失败。"
exit 1
fi
echo "正在删除超过7天的备份文件..."
find "$BACKUP_PATH" -type d -mtime +7 -exec rm -rf {} \;
if [ $? -eq 0 ]; then
echo "成功删除超过7天的备份文件。"
else
echo "删除备份文件时出现问题。"
fi
echo "所有操作完成。"