
1 前言
笔者有运行一个WordPress网站https://www.cmdshcool.org,为了安全,笔者决定将服务器文件备份到一台本地的文件服务器,于是创建此文。
2 最佳实践
2.1 系统配置
2.1.1 系统信息
wwwServer:
OS = CentOS 7.4 x86_64
HostName = www.cmdschool.org
backupServer:
OS = CentOS 6.5 x86_64
HostName = backupServer.cmdschool.org
2.1.2 安装备份工具
In wwwServer and backupServer:
yum install -y rsync
2.2 部署备份
2.2.1 配置备份目录
In wwwServer:
mkdir /backup/
In backupServer:
mkdir /data/backup/wwwBackup
2.2.2 配置公钥认证
In backupServer:
由于部署公钥认证不是本章的重点,请自行参阅以下文档配置,
2.2.3 部署备份脚本
In backupServer:
mkdir -p ~/scripts/ vim ~/scripts/backupWeb.sh
加入如下内容:
#!/bin/bash hostName="www.cmdschool.org" sqlUser="root" sqlPWD="password" sockPath="/var/lib/mysql/mysql.sock" dataBase="wordpress" dumpPath="/backup/www.cmdschool.org.dump" wwwDIR="/var/www/www.cmdschool.org" nginxDIR="/etc/nginx" scriptsDIR="/root/scripts" sshKeyDIR="/root/.ssh" backupDIR="/data/backup/wwwBackup" tarFile="www.cmdschool.org-`date "+%Y%m%d"`.tar.bz2" fileType="tar.bz2" log=/var/log/webBackup.log if [ ! -d $backupDIR ]; then exit 1 fi ping -c 1 "$hostName" > /dev/null if [ $? != 0 ]; then echo `date +"%Y-%m-%d %H:%M:%S"`" ping: unknown host $hostName" >> "$log" exit 1 fi cd $backupDIR ssh $hostName "mysqldump -S $sockPath -u$sqlUser -p$sqlPWD $dataBase > $dumpPath" rsync -av --delete $hostName:$wwwDIR/ $backupDIR/www.cmdschool.org/ rsync -av $hostName:$dumpPath $backupDIR/www.cmdschool.org.dump rsync -av --delete $hostName:$nginxDIR/ $backupDIR/nginx/ rsync -av --delete $hostName:$scriptsDIR/ $backupDIR/scripts/ rsync -av --delete $hostName:$sshKeyDIR/ $backupDIR/sshkey/ ssh $hostName crontab -l > $backupDIR/crontab.conf tar -cvjf $tarFile www.cmdschool.org/ www.cmdschool.org.dump nginx/ scripts/ sshkey/ crontab.conf # find $backupDIR -type f -name \*.$fileType -ctime +60 -exec ls -l {} \; find $backupDIR -type f -name \*.$fileType -ctime +60 -exec rm -rf {} \;
脚本执行逻辑,
– 脚本运行前先检查备份目录是否存在,如果不存在则直接退出
– 脚本运行前先检查备份的源主机是否能连接,如果不能连接则直接退出
– 脚本进入备份目录
– 脚本通过SSH协议和公钥认证远程登录wwwServer执行MySQL备份
– 脚本同步www目录数据到当前backupServer备份目录
– 脚本同步MySQL备份数据到当前backupServer备份目录
– 脚本同步nginx配置目录数据到当前backupServer备份目录
– 脚本把同步回备份目录的数据按照当前年月日打包存放
– 脚本清理超过30天的打包文件
2.2.4 配置计划任务
In backupServer:
crontab -e
加入如下内容:
0 1 * * * bash ~/scripts/backupWeb.sh
没有评论