前言
由于我目前使用的服务器是香港的,服务器上所有的服务全部基于docker部署,docker容器的数据映射在 /root
目录下,每个服务都有对应的目录;现在记录一下我的数据备份方式,目前采用linux的 bash
脚本加上linux自带的 crontab
来进行定时备份数据
开始设置自动备份
首先需要有一台存储备份数据的服务器,A服务器的数据定时备份至B服务器
在A服务器上安装并配置 SSH
免密登录至B服务器
# 安装sshpass
yum -y install sshpass
# 生成ssh密钥(一路回车即可)
ssh-keygen -t rsa -b 4096
# 将公钥复制到B服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 服务器端口 用户名@B服务器IP地址
# 通过ssh连接至B服务器,测试是否需要输入密码(如果可以免密登录,就可以继续配置)
ssh -p SSH端口号 用户名@服务器IP地址
在A服务器上创建 bash
脚本,并在脚本内填写命令
vim backup.sh
#!/bin/bash
# 服务器A上的源目录,填写绝对路径
SRC_DIR="/root"
# 服务器B上的目标目录,填写绝对路径
DST_DIR=""
# 服务器B的IP地址
SERVER_B_IP=""
# 服务器B的SSH用户名
SSH_USER=""
# 服务器B的SSH端口
SSH_PORT=""
# 备份文件前缀,生成的tar.gz的前缀名,例如我的是hongkong_server_docker_data
BACKUP_NAME_PREFIX="hongkong_server_docker_data"
# 压缩文件格式
ARCHIVE_FORMAT="tar.gz"
# 生成备份文件名
current_date=$(date +"%Y%m%d_%H%M%S")
backup_filename="${BACKUP_NAME_PREFIX}_${current_date}.${ARCHIVE_FORMAT}"
# 压缩源目录
tar -czf "${backup_filename}" -C "${SRC_DIR}" .
# 传输备份文件到服务器B
scp -P "${SSH_PORT}" "${backup_filename}" "${SSH_USER}@${SERVER_B_IP}:${DST_DIR}"
# 删除本地备份文件
rm -f "${backup_filename}"
# 保留最多3个备份文件
ssh -p "${SSH_PORT}" "${SSH_USER}@${SERVER_B_IP}" "ls -t ${DST_DIR}/${BACKUP_NAME_PREFIX}* | tail -n +4 | xargs --no-run-if-empty rm -f"
更具实际情况修改脚本后,赋予脚本可执行权限,并执行脚本测试一下
chmod +x backup.sh
./backup.sh
接下来配置cron定时任务,让脚本定时执行
# 打开linux自带的crontab
crontab -e
# 加入一行任务,定时和脚本路径根据实际情况修改,路径填写绝对路径
30 4 * * * /backup.sh
保存并关闭 cron
配置文件,现在每天早上4点30分,脚本会自动执行,将A服务器 /root
下的数据压缩备份至B服务器上了
Comments | NOTHING