数据, 对于自己来说无价, 对于别人来说可能一文不值.
对于单个或者服务器进行备份, 每个服务器进行一次设置太过于繁琐,
这里给一个简单方便的备份路子, 在一个备份服务器上对多个服务器的数据进行自动备份.
备份服务器预先准备好openssh-client rsync等等, 需要备份的服务器安装好类似mysqldump, gzip,rsync,openssh-client等软件包
首先运行ssh-keygen, 默认一路回车生成一套key, 文件存放于 ~/.ssh/目录下, 一般文件名以id打头, 文件名为.pub的文件内容放到生产服务器上.
ssh-keygen -t rsa
一根据参数一般会得到类似这样的文件名 id_rsa.pub id_ecdsa.pub id_ed25519.pub
以id_rsa.pub为例子, 将文件内的文本内容, 写入需要进行备份数据服务器的/root/.ssh/authorized_keys文件内.
cat ~/.ssh/id_rsa.pub
快速自动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的内网里面.