数据定时备份, 推送到gitee
一、定时脚本
//将脚本内容复制 在/usr/下新建backup.sh (目录可自定)
chmod +x /usr/backup.sh // 赋予执行权限
crontab -e // 编辑定时任务
00 02 * * * /bin/sh /usr/backup.sh // 每天晚上2点定时提交beuif
二、在任意目录新建备份脚本 (backup.sh) 注意邮件通知 需配置邮箱, 打包文件, 推送git
a 基础
#!/bin/bash
message=$(date "+%Y-%m-%d~%H.%M.%S-数据备份")
source_dir="/root/.halo2"
target_dir="/home/data/halo-data"
# 复制数据
cp -r "$source_dir" "$target_dir" || exit
# 导出MySQL数据库
docker exec mysql mysqldump -h 127.0.0.1 -P 3306 -u root -p123456 halo > "$target_dir/halo.sql" || exit
# 切换到目标目录
cd "$target_dir" || exit
# 添加所有更改到 Git
git add . || exit
# 提交更改
git commit -am "${message}" || exit
# 推送到远程仓库
git push origin master || exit
echo "${message}" | mail -s "数据备份成功" zhangruiidea@foxmail.com
b 打印日志版本
#!/bin/bash
message=$(date "+%Y-%m-%d~%H.%M.%S-数据备份")
source_dir="/root/.halo2"
target_dir="/home/data/backup-data"
log_file="/home/data/backup.log"
halo_dir="$target_dir/halo"
# 清空日志文件
> "$log_file"
# 删除目标目录(如果存在)
rm -rf "$halo_dir"
# 复制数据
cp -r "$source_dir" "$halo_dir" || exit
# 导出MySQL数据库
if docker exec mysql mysqldump -h 127.0.0.1 -P 3306 -u root -p123456 halo > "$halo_dir/halo.sql"; then
echo "$(date "+%Y-%m-%d %H:%M:%S") - 导出MySQL数据库成功" >> "$log_file"
else
echo "$(date "+%Y-%m-%d %H:%M:%S") - 导出MySQL数据库失败" >> "$log_file"
exit 1
fi
# 切换到目标目录
cd "$target_dir" || exit
# 添加所有更改到 Git
git add . || exit
# 提交更改
git commit -am "${message}" || exit
# 推送到远程仓库
if git push origin master; then
echo "$(date "+%Y-%m-%d %H:%M:%S") - 推送到远程仓库成功" >> "$log_file"
else
echo "$(date "+%Y-%m-%d %H:%M:%S") - 推送到远程仓库失败" >> "$log_file"
exit 1
fi
# 发送邮件通知
subject="数据备份日志"
# 发送整个日志内容
echo -e "${message}运行日志:\n$(cat "$log_file")" | mail -s "$subject" zhangruiidea@foxmail.com
echo "${message}" >> "$log_file"
三、发送邮箱脚本
yum -y install mailx
vim /etc/mail.rc 在最后面添加下面参数,邮箱账号和援权密码根据自己的填写
以下为mail.rc内容
#!/bin/bash
# 设置 QQ 邮箱参数
set from=xxxx@qq.com
set smtp=smtps://smtp.qq.com:465
set ssl-verify=ignore
set nss-config-dir=/root/.certs
set smtp-auth-user=xxxxx@qq.com
set smtp-auth-password=xxxxxx
set smtp-auth=login
四、扩展
定时备份mysql数据
#!/bin/bash
message=$(date "+%Y-%m-%d~%H.%M.%S-数据备份")
target_dir="/home/data/backup-data"
log_file="/home/data/backup-data/mysql.log"
mysql_dir="$target_dir/mysql"
# 清空日志文件
> "$log_file"
# 删除目标目录(如果存在)
rm -rf "$mysql_dir"
mkdir -p "$mysql_dir"
# 导出memos数据库
if docker exec mysql mysqldump -h 127.0.0.1 -P 3306 -u root -p123456 memos_prod > "$mysql_dir/memos_prod.sql"; then
echo "$(date "+%Y-%m-%d %H:%M:%S") - 导出memos数据库成功" >> "$log_file"
else
echo "$(date "+%Y-%m-%d %H:%M:%S") - 导出memos数据库失败" >> "$log_file"
exit 1
fi
# 导出chestnut_cms数据库
if docker exec mysql mysqldump -h 127.0.0.1 -P 3306 -u root -p123456 chestnut_cms > "$mysql_dir/chestnut_cms.sql"; then
echo "$(date "+%Y-%m-%d %H:%M:%S") - 导出chestnut_cms数据库成功" >> "$log_file"
else
echo "$(date "+%Y-%m-%d %H:%M:%S") - 导出chestnut_cms数据库失败" >> "$log_file"
exit 1
fi
# 切换到目标目录
cd "$target_dir" || exit
# 添加所有更改到 Git
git add . || exit
# 提交更改
git commit -am "${message}" || exit
# 推送到远程仓库
if git push origin master; then
echo "$(date "+%Y-%m-%d %H:%M:%S") - 推送到远程仓库成功" >> "$log_file"
else
echo "$(date "+%Y-%m-%d %H:%M:%S") - 推送到远程仓库失败" >> "$log_file"
exit 1
fi
# 发送邮件通知
subject="数据备份日志"
# 发送整个日志内容
echo -e "${message}运行日志:\n$(cat "$log_file")" | mail -s "$subject" zhangruiidea@foxmail.com
echo "${message}" >> "$log_file"