zhangrui.i
zhangrui.i
发布于 2024-03-05 / 27 阅读
0
1

Liunx 定时备份数据到Git

数据定时备份, 推送到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"


评论