CentOS 通过rsync实时备份

目标

通过rsync同步备份服务器端的文件,并在本地制作每日备份包,防止因服务器文件损坏导致的本地文件损坏

服务器环境

名称 系统 位置 IP
服务器 CentOS7 阿里云 47.101.99.11
服务器 CentOS7 本地 129.18.30.12

规划

服务器挂载数据盘到 /home/data
服务器数据库备份到 /home/data/db
服务器Web在 /home/data/web

配置过程

服务端配置

1、数据库备份脚本

#!/bin/sh
MYDATE=`date +%Y%m%d`
# 保存备份文件的目录
cd /home/data/db
BAKFILE=数据库名称.$MYDATE.sql
TARFILE=数据库名称.$MYDATE.tar.gz
# 以下采用dump方式备份mysql,此例使用的是docker,-p后无空格接明文密码
mysqldump -h 127.0.0.1 -P 32768 -u root -p明文密码 数据库名称(注意大小写) >$BAKFILE
# 打包压缩
tar -czf $TARFILE $BAKFILE
rm -rf $BAKFILE

2、安装rsync服务

yum install rsync -y

编辑配置文件

uid = root
gid = root
port = 873
use chroot = yes
#read only = no
# # list = no
max connections = 4
# # pid file = /var/run/rsyncd.pid
transfer logging = yes
timeout = 900
motd file = /etc/rsyncd/rsyncd.motd
log file = /var/log/rsyncd.log
lock file = /var/run/rsyncd.lock
ignore nonreadable = yes
dont compress=*.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

[web]
path=/home/data/web
comment=web
read only = yes
auth users = root
secrets file = /etc/rsyncd.passwd
hosts allow = 129.18.30.12

[web]
path=/home/data/db
comment=db
read only = yes
auth users = root
secrets file = /etc/rsyncd.passwd
hosts allow = 129.18.30.12

生成同步密码文件

echo 'root:1233423452asdfg'>/etc/rsyncd.passwd
chmod 600 /etc/rsyncd.passwd

systemctl enable rsyncd
systemctl restart rsyncd

firewall-cmd --zone=public --add-port=873/tcp --permanent
firewall-cmd --reload

关闭SELINUX

本地备份端配置

安装rsync同上

echo '1233423452asdfg'>/etc/rsyncd.passwd
chmod 600 /etc/rsyncd.passwd

测试备份端

rsync -avz --password-file=/etc/rsyncd.passwd root@47.101.99.11::web /backup/webbackup
rsync -avz --password-file=/etc/rsyncd.passwd root@47.101.99.11::db /backup/dbbackup

自动备份脚本

创建脚本文件/home/pull_remote.sh,打包本地WEB,防止文件损坏后的同步导致无法找回原文件。

#!/bin/sh
rsync -avz --password-file=/etc/rsyncd.passwd root@47.101.99.11::web /backup/webbackup
rsync -avz --password-file=/etc/rsyncd.passwd root@47.101.99.11::db /backup/dbbackup
MYDATE=`date +%Y%m%d`
cd /backup
BAKFILE=webbackup
TARFILE=webbackup.$MYDATE.tar.gz
tar -czf $TARFILE $BAKFILE

添加计划任务

crontab -e
0 * * * /home/pull_remote.sh