jetsung 备份服务器数据的脚本 使用方法: 创建文件 .bakdir 将需要备份的文件夹或文件路径保存到该文件,如下 /etc/cron.d /root/proj /root/shfiles /root/dockers /srv /data/wwwroot/default/index.html /usr/local/nginx/conf/vhost/ nginx.conf rewrite/ wildcard/ 文件格式说明: 绝对的文件路径,使用 / 开头,如 /usr/local/nginx/conf/vhost/ 相对的文件路径时,使用非 / 开头,与上一行同一个父级目录,如: /usr/local/nginx/conf/vhost/ nginx.conf rewrite nginx.conf => /usr/local/nginx/conf/nginx.conf rewrite => /usr/local/nginx/conf/rewrite 执行脚本 # 保存到临时文件夹 bash migrate.sh # 保存到指定的文件夹 bash migrate.sh target 脚本文件:migrate.sh #!/usr/bin/env bash set -euo pipefail main() { sync_path=${1:-} bak_file=".bakdir" if [ ! -f "$bak_file" ]; then printf "\n\033[1;31mNot found file:\033[0m %s\n" "$bak_file" exit 1 fi if [ -d "$sync_path" ]; then printf "\n\033[1;031mFolder is exists:\033[0m %s\n" "$sync_path" exit 1 fi if [ -n "$sync_path" ]; then mkdir "$sync_path" else sync_path=$(mktemp -d -t bak.data_XXXXXX) fi if [ ! -d "$sync_path" ]; then printf "\n\033[1;31mNot found:\033[0m %s\n" "$sync_path" exit 1 fi echo "Backuping." # 读取备份文件列表 bak_list=$(cat "$bak_file") # 进入同步目录 pushd "${sync_path}" >/dev/null 2>&1 || exit 1 prev_dir="" # 遍历备份文件列表 while read -r line; do if echo "$line" | grep '^/'; then prev_dir=$(dirname "$line") else line="$prev_dir/$line" fi if [ -f "$line" ] || [ -d "$line" ]; then rsync -a --relative "$line" ./ else echo "警告: $line 不存在或不是文件/目录" fi done <<< "$bak_list" # 返回原目录 popd >/dev/null 2>&1 || exit 1 printf "Backup done:\n\033[1;33m%s\033[0m\n" "$sync_path" } main "$@" || exit 1 # 1. 若使用 oneinstack,请记住要备份整站(数据库和网站),然后再备份,即 # 先安装备份信息: # ./oneinstack/backup_setup.sh # 再备份数据: # ./oneinstack/backup.sh # 同步到目标服务器: # rsync -av --relative "/data/backup" remote:/data # 注意:应该直接备份到目标站点,防止空间不足 # 2. 将所有需要备份的数据迁移到目录 migrate 后,需要再将此目录同步到目标服务器 # rsync -av --relative ./migrate remote:/migrate # 3. 若是迁移的源服务器、目标服务器均为腾讯云服务,可以使用 rclone 工具备份到 COS,以方便恢复数据。 # 详情,请查阅 rclone 官方文档:https://rclone.org/ # 其它云平台同理(按 rclone 支持的对象存储,比如阿里云等云服务商),走内网不需要流量。 # # 使用方法: # # 备份列表 .bakdir # /srv/dir/mydir2 # mydir3 => /srv/dir/mydir3 # # # 保存到临时文件夹 # bash migrate.sh # # # 保存到指定的文件夹 # bash migrate.sh target
jetsung 预览 [cast]1[/cast] [cast]YoBuEB6n5wyYaucjPAwkcvzSl[/cast] [TEXTSIZE size=1000]This is probably too big[/TEXTSIZE]