Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
用ssh远程备份多个服务器的数据
#1
数据, 对于自己来说无价, 对于别人来说可能一文不值.

对于单个或者服务器进行备份, 每个服务器进行一次设置太过于繁琐,

这里给一个简单方便的备份路子,  在一个备份服务器上对多个服务器的数据进行自动备份.


备份服务器预先准备好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的内网里面.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)