| 本帖最后由 Kvm 于 2023-3-12 10:24 编辑 
 数据, 对于自己来说无价, 对于别人来说可能一文不值.
 对于单个或者服务器进行备份, 每个服务器进行一次设置太过于繁琐,
 这里给一个简单方便的备份路子,  在一个备份服务器上对多个服务器的数据进行自动备份.
 
 
 备份服务器预先准备好openssh-client rsync等等, 需要备份的服务器安装好类似mysqldump, gzip,rsync,openssh-client等软件包
 首先运行ssh-keygen, 默认一路回车生成一套key, 文件存放于 ~/.ssh/目录下,  一般文件名以id打头, 文件名为.pub的文件内容放到生产服务器上.
 
 
 一根据参数一般会得到类似这样的文件名 id_rsa.pub  id_ecdsa.pub  id_ed25519.pub
 以id_rsa.pub为例子, 将文件内的文本内容, 写入需要进行备份数据服务器的/root/.ssh/authorized_keys文件内.
 
 
 快速自动shell脚本方案
 
 复制代码#!/bin/bash
setenforce 0 >> /dev/null 2>&1
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
mkdir -p /root/.ssh/
cat >>/root/.ssh/authorized_keys<<EOF
这里粘贴上cat ~/.ssh/id_rsa.pub的内容
EOF
 然后就是在备份服务器上测试ssh登录是否能免密码进入.
 
 
 
 前期准备做好后, 在备份服务器上开始搞事情直接跑数据备份了.
 
 备份服务器上开始准备目录以及备份脚本
 
 
 
 以脚本存放文件名/opt/rsync.sh为例子
 
 复制代码#/opt/rsync.sh
gettime=$(date +%Y-%m-%d-%H:%M)
BAKPATH=/opt/backup/archive/$gettime
mkdir -p  $BAKPATH/{SERVER1,SERVER2,SERVER3,SERVER4}  #此处以此类推
ssh root@SERVER1   'cd /home/webpath/web1.com/; tar -zcf  - ./' | cat > $BAKPATH/SERVER1/web-web1.com-$(date +%Y-%m-%d-%H:%M).tar.gz
ssh root@SERVER1  'mysqldump  -u数据库用户名  -p数据库密码 数据库名| gzip' > $BAKPATH/SERVER1/data-web1.com-$(date +%Y-%m-%d-%H:%M).sql.gz
#这里ssh以此类推SERVER1, SERVER3 , SERVER4, 有多少个服务器就加多少个服务器
 保存好文件后执行sh /opt/rsync.sh, 测试备份是否正常.
 数据库账号密码安全问题可以在服务器上写一个配置文件用shell去读去, 不用在ssh里面写明文.
 
 测试正常后丢cron自动跑定时任务
 
 
 复制代码#crontab -e
0 0 * * 0 sh /opt/rsync.sh
 
 上面提到了rsync, 也可以加在脚本/opt/rsync.sh里面用上, 不论是将远程数据同步回来, 还是再把本地数据同步出去一份.
 如果网站体积大的建议把tar打包换成rsync同步备份.
 
 
 复制代码
mkdir /opt/backup/{SERVER1,SERVER2,SERVER3,SERVER4}/web
rsync -avPq  root@SERVER2:/home/webpath/web2.com/   /opt/backup/SERVER2/web  #将远程的数据同步回备份服务器.
rsync -avPq  /opt/backup/   root@SERVER4:/opt/backup/  #将备份服务器的数据同步到另外的服务器上去
 
 所有的脚本往/opt/rsync.sh里面丢, 一次控制N个服务器, 要更加的安全可以把备份服务器丢在nat的内网里面.
 
 
 
 
 
 |