日期:2014-05-16  浏览次数:20713 次

Linux下远程备份脚本
参考http://www.vpser.net/manage/scp.html
参考http://www.linuxidc.com/Linux/2008-01/10857.htm

场景:要将公网B机器上的数据库文件备份到局域网的A机器上,B机器上,每隔一天备份一次数据库

思路
因为局域网的机器无固定IP,所以在A机器上执行 ssh-keygen -t rsa

把这个密钥对中的公共密钥访问属性改为755,然后复制到B机器上去,并改名为 authorized_keys
[root@xxx root]#chmod 755 /root/.ssh/id_rsa.pub
[root@xxx root]# scp /root/.ssh/id_rsa.pub 192.168.1.92:/root/.ssh/authorized_keys
root@xxx's password

id_rsa.pub                                    100%  218     3.2MB/s   00:00

这样,可以从A机器上去上传文件至B机器,或者从B机器上下载文件至A(这里都是在A的机器上执行的操作)。

定期在A机器上执行如下脚本,就可以周期备份数据到A、B机器上。

#!/bin/bash

#用于数据库远程备份的脚本,会在远程服务器上的指定位置以及本机上各生成一个备份文件

remoteHost=192.168.1.168                        #远程服务器IP
remoteDB=/root/backup/                          #在远程服务器备份的目录
localDB=/root/backup/                           #本机的数据库备份目录

DATABASE=azGuard                                        #要备份的数据库名称
USERNAME=root                                           #数据库用户名
PASSWORD=root                                           #数据库密码

#生成的数据文件名
dbFile=${DATABASE}`date +%Y``date +%m``date +%d`".sql"

remoteFile=${remoteDB}${dbFile}
localFile=${localDB}${dbFile}

command="mysqldump -u${USERNAME} -p${PASSWORD} --databases ${DATABASE} > ${remoteFile}"
echo ${command}
result=`ssh root@${remoteHost} ${command}`
result=`scp root@${remoteHost}:${remoteFile} ${localFile}`