写了一个 shell 脚本备份网站,帮看看,谢谢! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nbweb
V2EX    问与答

写了一个 shell 脚本备份网站,帮看看,谢谢!

  •  
  •   nbweb 2025 年 8 月 21 日 602 次点击
    这是一个创建于 182 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #!/bin/bash # 此文件为备份 VPS 数据库和 WEB 目录,使用密钥登录到 VPS 服务器。 # 每月 1 日打包 web 目录备份,导出数据库存为 sql 文件备份,保留最新的 12 个月 # 每星期二用 rsyc 进行增量备份 # 远程服务器为 debian ,本地 nas 为 debian DB_USER="root" DB_PASS="$MYSQL_PASSWORD" # 使用环境变量存储密码,设置方法见下文 Local_dir="/mnt/Public/HomeFiles/mysite" # 本地 NAS 备份服务器目录 BACKUP_DIR="/root/backup" # 远程 VPS 备份目录 DATE_ALL=$(date +%Y%m%d_%H%M%S) # 格式如 20250820_1738 DATE_DAY=$(date +%d) # 获取系统日期 DATE_WEEK=$(date +%A) # 获取系统星期 LOG_FILE="${Local_dir}/backup_log_${DATE_ALL}.log" # 本地日志文件 MYSQL_PATH="/var/lib/mysql" # mysql 数据库路径 DATA_FILE=`ls -l $MYSQL_PATH | awk '{ print $9 ; }'` # 数据库目录 WEB_PATH="/var/www" # web 路径 WEB_FILE=`ls -l $WEB_PATH | awk '{ print $9 ; }'` # web 目录 Remote_IP=(8.8.8.8) # vps IP Remote_Port=22 #--->vps Port 端口 # 创建本地 NAS 备份目录 mkdir -p "$Local_dir/backup/$(date +%Y%m%d)" 2>> "$LOG_FILE" # 记录开始时间 echo "$DATE_ALL 开始备份" >> "$LOG_FILE" # 检查是否为 1 号 (全量备份) if [ "$DATE_DAY" -eq 1 ]; then echo "$DATE_ALL 全量备份开始" >> "$LOG_FILE" echo "$DATE_ALL 开始登录远程 vps" >> "$LOG_FILE" # 一次性登录 VPS 执行所有备份命令 ssh -p $Remote_Port root@${Remote_IP[0]} << "EOF" 2>> "$LOG_FILE" #echo "$DATE_ALL 已登录远程 vps" >> "$LOG_FILE" #按数据库名导出 sql 格式 BACKUP_TEMP_DIR=/root/backup mkdir -p $BACKUP_TEMP_DIR cd $BACKUP_TEMP_DIR for DataName in ${DATA_FILE} ; do if [ -d $MYSQL_PATH/$DataName ];then /usr/bin/mysqldump --databases $DataName -u$DB_USER -p$DB_PASS | gzip > $DataName\_$DATE_ALL.sql.gz 2>> "$LOG_FILE" echo "$DATE_ALL 数据库:${DataName}_${DATE_ALL}.sql.gz 备份已完成" >> "$LOG_FILE" fi done # 备份 web 目录,打包为 tar.gz for WebName in ${WEB_FILE} ; do if [ -d $WEB_PATH/$WebName ];then tar -zcf $WebName_$(DATE_ALL).tar.gz $WEB_PATH/$WebName 2>> "$LOG_FILE" echo "$DATE_ALL 网页:$WebName ${WebName}_${DATE_ALL}.tar.gz 备份已完成" >> "$LOG_FILE" fi done EOF # 备份传回 NAS 目录 echo "$DATE_ALL 开始向 nas 传输备份文件" >> "$LOG_FILE" rsync -avz --delete -e "ssh -p $Remote_Port" root@${Remote_IP[0]}:$BACKUP_TEMP_DIR/* $Local_dir/backup_$(date +%Y%m%d) 2>> "$LOG_FILE" echo "$DATE_ALL 备份文件已全部传回到 nas" >> "$LOG_FILE" else exit 0 fi if [ "$DATE_WEEK" = "Tuesday" ]; then #如果今天是星期二,就增量备份数据库和 web 目录 for VPS_IP in "${Remote_IP[@]}"; do rsync -avz --delete -e "ssh -p $Remote_Port" root@$VPS_IP:/var/www $Local_dir/$VPS_IP rsync -avz --delete -e "ssh -p $Remote_Port" root@$VPS_IP:/etc/nginx/sites-enabled $Local_dir/$VPS_IP rsync -avz --delete -e "ssh -p $Remote_Port" root@$VPS_IP:/var/lib/mysql $Local_dir/$VPS_IP # rsync -avz --delete -e "ssh -p $Remote_Port" root@$VPS_IP:/root/aaa $Local_dir/$VPS_IP done else exit 0 fi 
    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2037 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:20 PVG 21:20 LAX 05:20 JFK 08:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86