咕咕在后台经常会遇到小伙伴留言修改咕咕在后台经常会遇到小伙伴留言:
“我要如何备份自己服务器上的数据?”
其实之前博客里发过类似的内容:
【有用的小知识】Docker容器如何更新?如何迁移应用?如何卸载?
对于一些喜欢折腾的小伙伴来说,经常会买一些奇奇怪怪的商家的服务器,这些商家提供的机器可能非常便宜,甚至免费,但也可能会随时会删机、或者跑路,大家的担心其实是有必要的。
当然博客推荐的商家都是咕咕自己也上车的商家,还是非常靠谱的。
然而,不管用的是啥服务器,不管商家有多高的在线率保证,只要你的数据对你来说是重要的,都非常建议多异地备份。
最近在用ChatGPT,想到其实完全可以让它来给我们写一个定时自动备份的脚本。
马上开整。
1. 提的需求
写一个Linux自动备份脚本,把A服务器上的
/root/data/docker_data
文件夹的内容压缩之后每天早上4点30分自动备份到B服务器上的/root/data/backup
目录下,要求最多保留3份备份。其中B服务器的SSH端口为
2222
,B服务器上的/root/data/backup
目录已经创建好了。
说明:
- 熟悉咕咕的小伙伴都知道,我们docker搭建的项目都放在了
/root/data/docker_data
这个文件夹下面,里面包含了各个容器的数据和配置文件,迁移服务器最关键的东西都在这里了(image镜像不在这边,也不需要备份,我们可以直接在docker hub上拉取) “每天早上4点30分”
是因为对于网站来说,这个时间段网址访问人数相对较少,服务器负载小
2. ChatGPT的回答
以下是一个可以完成所需任务的bash脚本。请将以下脚本保存为backup.sh
。
sudo -i # 切换到root用户
vim backup.sh # 编辑back.sh文件
写入以下内容:
#!/bin/bash
# 服务器A上的源目录
SRC_DIR="/root/data/docker_data"
# 服务器B上的目标目录
DST_DIR="/root/data/backup"
# 服务器B的IP地址
SERVER_B_IP="your_server_b_ip"
# 服务器B的SSH用户名
SSH_USER="your_ssh_username"
# 服务器B的SSH端口
SSH_PORT="2222"
# 备份文件前缀
BACKUP_NAME_PREFIX="docker_data_backup"
# 压缩文件格式
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"
接下来,我们需要在服务器A上配置cron job以实现每天早上4点30分自动执行上面的备份脚本。请按照以下步骤操作:
- 使用
chmod
命令为脚本添加可执行权限:
chmod +x backup.sh
接下来,我们需要在A服务器上安装并配置SSH免密登录到B服务器。请在A服务器上执行以下命令:
# 安装sshpass(如已安装,请忽略)
sudo apt-get install sshpass
# 生成SSH密钥
ssh-keygen -t rsa -b 4096
# 一路回车即可
# 将公钥复制到B服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 服务器端口 user@B服务器IP地址
可以检测一下,A服务器直接用ssh -p 服务器端口 user@B服务器IP地址
是否可以免密登录B服务器,如果可以,说明可以继续下一步。
- 使用
crontab -e
命令打开服务器A上的cron配置:
crontab -e
- 在打开的cron配置文件中,添加以下一行内容以设置每天早上4点30分执行
backup.sh
脚本。请确保将/path/to/backup.sh
替换为实际的脚本文件路径。
30 4 * * * /root/backup.sh
- 保存并关闭cron配置文件。
现在,每天早上4点30分,脚本将自动执行,并将/root/data/docker_data
目录压缩备份到服务器B的/root/data/backup
目录下,同时保留最多3份备份。
3. 测试
测试了一下,没啥问题。
修改了一下文件路径,备份了一下halo博客的,也正常:
舒服了,甲骨文可以愉快得用起来了,再也不怕商家跑路了!
友情提示: 其实不管用的是啥服务器,不管商家有多高的在线率保证,只要你的数据对你来说是重要的,都要多异地备份。
4. 总结
用上了ChatGPT,写一些简单的脚本对于没有什么代码基础的我们来说,已经不再是问题。
推荐阅读:
评论区