本帖最后由 宝塔用户_lpdcdh 于 2021-7-9 21:24 编辑
- #!/bin/bash
- sqluser="" #数据库帐号
- sqlpass="" #数据库密码
- sqlname="www_abc_com" #数据库表名
- sqlPath="/www/wwwroot/www.abc.com/data.sql" #备份的SQL文件储存路径
- tagdir="/www/wwwroot/www.abc.com" #要打包的目录 注意,远端同样解压到该目录
- tagtmpPath="/www/backup" #压缩包存放目录 一般和CLIENTDIR相同
- IP="" #服务器地址
- PORT="22" #端口
- USER="root" #用户
- PASSWD="" #密码
- CLIENTDIR="/www/backup" #本机目录 一般和tagtmpPath相同
- SEVERDIR="/www/backup" #远程目录
- File="File.tar" #文件名
- Bdel=1 #1.自动删除备份的压缩包
- Adel=1 #1.先删除文件夹在解压 2.直接覆盖(已删除的数据不会同步删除)
- Remotesqluser="" #远程数据库帐号
- Remotesqlpass="" #远程数据库密码
- #判断数据库参数是否完整!如果完成就备份数据库
- if [[ -n $sqluser && -n $sqlpass && -n $sqlname && -n $sqlPath ]]; then
- mysqldump -u$sqluser -p$sqlpass $sqlname > $sqlPath ;fi
- cd $tagdir #转到网站根目录
- tar -czf $tagtmpPath/$File * #打包数据
- rm -f $sqlPath #删除备份的数据库文件
- lftp -u $USER,$PASSWD sftp://$IP:$PORT << EOF #连接服务器
- cd ${SEVERDIR}
- lcd ${CLIENTDIR}
- put ${File}
- by
- exit
- EOF
- #下面是连接远程服务器执行的脚本
- ssh $USER@$IP -p$PORT << EOF
- if [ $Adel -eq 1 ]; then rm -rf ${tagdir}/*;fi
- tar -zxf $SEVERDIR/$File -C $tagdir
- if [ ! -n $Remotesqluser ]; then mysql -u$Remotesqluser -p$Remotesqlpass $sqlname < $sqlPath ;fi
- exit
- EOF
- 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点执行还原脚本
但如果我要手动同步的话就得先到阿里云同步了在去备用执行还原
感觉不太方便
脚本也公布下
- Adel=1 #1.先删除文件夹在覆盖 2.直接覆盖
- WangZhanBak=`find /www/backup/Ghost/bt_backup/site/www.abc.com/ -name "web_www_abc_com_*.gz"` #搜索需要解压的文件
- Ydir="/www/wwwroot/www.abc.com"
- JieYadir="/www/wwwroot"
- if [ -e "$WangZhanBak" ]; then
- echo $WangZhanBak #显示找到的备份文件
- if [ $Adel -eq 1 ]; then
- echo "${Ydir}/*" #显示要删除的路径
- chattr -i ${Ydir}/.user.ini
- rm -rf ${Ydir}/* #删除该路径下的全部数据
- fi #自动删除结束
- sudo tar -zxvf $WangZhanBak -C $JieYadir > /dev/null #解压
- chattr +i ${Ydir}/.user.ini
- else
- echo "file does not exist"
- fi
- #exit
-
- var=`find /www/backup/Ghost/bt_backup/database/www_abc_com/ -name "db_www_abc_com_*.gz"` #搜索需要解压的文件
- if [ -e "$var" ]; then
- #echo $var #显示找到的备份文件
- cd /www/backup/Ghost/bt_backup/database/www_abc_com/
- gzip -d $var #解压
- sqldir=$(echo $var | grep -Eo ".+\.sql") #取路径
- echo $sqldir #显示路径
- mysql -uroot -ppass www_abc_com < $sqldir #恢复数据库
- #rm -f $sqldir #恢复后删除
- gzip $sqldir #重新打包数据库
- else
- echo "SQL BAK No"
- fi
复制代码 最后就重新写了个脚本..实现了我想要的功能
主备服务器需要配置SSH免密 方法百度一堆
主服务器需要安装lftp
yum -y install lftp
脚本的可靠性自己考虑..
那里写的不对请大神指点
其他的想不到了,基本上都是默认的
|
|