宝塔618特惠活动,企业版999元/年,宝塔SSL证书买1送1!限时抢购!查看活动
当前位置:论坛首页 > Linux面板 > 讨论

分享一个备份网站到备用服务器的脚本

发表在 Linux面板2021-7-9 21:24 [复制链接] 2 2287

本帖最后由 宝塔用户_lpdcdh 于 2021-7-9 21:24 编辑
  1. #!/bin/bash
  2. sqluser="" #数据库帐号
  3. sqlpass="" #数据库密码
  4. sqlname="www_abc_com" #数据库表名
  5. sqlPath="/www/wwwroot/www.abc.com/data.sql" #备份的SQL文件储存路径
  6. tagdir="/www/wwwroot/www.abc.com"  #要打包的目录 注意,远端同样解压到该目录
  7. tagtmpPath="/www/backup" #压缩包存放目录 一般和CLIENTDIR相同
  8. IP=""  #服务器地址
  9. PORT="22" #端口
  10. USER="root" #用户
  11. PASSWD=""  #密码
  12. CLIENTDIR="/www/backup"  #本机目录 一般和tagtmpPath相同
  13. SEVERDIR="/www/backup" #远程目录
  14. File="File.tar"  #文件名
  15. Bdel=1  #1.自动删除备份的压缩包
  16. Adel=1        #1.先删除文件夹在解压 2.直接覆盖(已删除的数据不会同步删除)
  17. Remotesqluser=""                 #远程数据库帐号
  18. Remotesqlpass=""         #远程数据库密码

  19. #判断数据库参数是否完整!如果完成就备份数据库
  20. if  [[  -n $sqluser  &&   -n $sqlpass  &&  -n $sqlname  &&  -n $sqlPath ]]; then
  21. mysqldump -u$sqluser -p$sqlpass $sqlname > $sqlPath  ;fi

  22. cd $tagdir  #转到网站根目录
  23. tar -czf $tagtmpPath/$File *  #打包数据
  24. rm -f $sqlPath  #删除备份的数据库文件

  25. lftp -u $USER,$PASSWD sftp://$IP:$PORT << EOF  #连接服务器
  26. cd  ${SEVERDIR}
  27. lcd ${CLIENTDIR}
  28. put ${File}
  29. by
  30. exit
  31. EOF

  32. #下面是连接远程服务器执行的脚本
  33. ssh $USER@$IP -p$PORT  << EOF
  34. if [ $Adel -eq 1 ]; then rm -rf ${tagdir}/*;fi
  35. tar -zxf  $SEVERDIR/$File -C  $tagdir
  36. if  [ ! -n $Remotesqluser ]; then mysql -u$Remotesqluser -p$Remotesqlpass $sqlname < $sqlPath  ;fi
  37. exit
  38. EOF

  39. if [ $Bdel -eq 1 ]; then rm -rf $tagtmpPath/$File;fi
复制代码
新手记录下 大神勿喷...

生产环境: 阿里云 CentOS 8.4.2105(Py3.7.9) 宝塔 7.6.0
备用环境: ESXI虚拟机安装 CentOS 8.4.2105(Py3.7.9) 宝塔7.6.0

宝塔安装的软件基本上差不多
主要是想把数据同步到备份服务器上
又不想付钱买插件..
本来的想法是利用宝塔的API迁移的(迁移不改变原站任何数据)
但这玩意只能在空白的时候使用

因为我备用服务器也是做了相关域名配置的
主服务器和备用完全独立运行 域名不同 非实时同步
所以我没办法删除了在重新同步
期间试过利用备份到FTP储存空间在通过脚本解压数据和还原数据库
比如阿里云凌晨3点备份到备用服务器上,然后备用服务器4点执行还原脚本
但如果我要手动同步的话就得先到阿里云同步了在去备用执行还原
感觉不太方便
脚本也公布下
  1. Adel=1 #1.先删除文件夹在覆盖 2.直接覆盖
  2. WangZhanBak=`find /www/backup/Ghost/bt_backup/site/www.abc.com/ -name "web_www_abc_com_*.gz"` #搜索需要解压的文件
  3. Ydir="/www/wwwroot/www.abc.com"
  4. JieYadir="/www/wwwroot"
  5. if [ -e "$WangZhanBak" ]; then
  6. echo $WangZhanBak #显示找到的备份文件

  7. if [ $Adel -eq 1 ]; then
  8. echo "${Ydir}/*" #显示要删除的路径
  9. chattr -i ${Ydir}/.user.ini
  10. rm -rf ${Ydir}/*  #删除该路径下的全部数据
  11. fi #自动删除结束
  12. sudo tar -zxvf  $WangZhanBak -C  $JieYadir > /dev/null #解压
  13. chattr +i ${Ydir}/.user.ini
  14. else
  15. echo "file does not exist"
  16. fi

  17. #exit

  18. var=`find /www/backup/Ghost/bt_backup/database/www_abc_com/ -name "db_www_abc_com_*.gz"` #搜索需要解压的文件
  19. if [ -e "$var" ]; then
  20. #echo $var #显示找到的备份文件
  21. cd /www/backup/Ghost/bt_backup/database/www_abc_com/
  22. gzip -d   $var  #解压
  23. sqldir=$(echo $var | grep -Eo ".+\.sql") #取路径
  24. echo $sqldir #显示路径
  25. mysql -uroot -ppass www_abc_com < $sqldir  #恢复数据库
  26. #rm -f $sqldir  #恢复后删除
  27. gzip $sqldir  #重新打包数据库
  28. else
  29.         echo "SQL BAK No"
  30. fi


复制代码
最后就重新写了个脚本..实现了我想要的功能
主备服务器需要配置SSH免密 方法百度一堆
主服务器需要安装lftp  
yum -y install lftp


脚本的可靠性自己考虑..
那里写的不对请大神指点
其他的想不到了,基本上都是默认的


使用道具 举报 只看该作者 回复
发表于 2021-7-10 21:06:54 | 显示全部楼层
暂时用不上,,但感觉很高级,,先留个迹方便以后找到
使用道具 举报 回复 支持 反对
发表于 2021-7-11 09:56:04 | 显示全部楼层
小白看不懂啊
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术免费分析

工作时间:09:00至18:30

快速回复 返回顶部 返回列表