本帖最后由 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的内网里面.
|