Linux下使用rsync同步文件
今天遇到一个需求,要把源数据库(服务器A)上的数据定时导出并压缩后同步到目标服务器B上,最后决定使用rsync同步数据文件。实现过程如下:
1. 在服务器B上安装rsync。
方式一:
yum install -y rsync
方式二:
下载安装包
wget下载
cd /home/software
wget https://download.samba.org/pub/rsync/src/rsync-3.0.6.tar.gz
手动下载:https://download.samba.org/pub/rsync/src/rsync-3.0.6.tar.gz,把安装包放到/home/software里面
下载安装包后执行如下命令:
cd /home/software
tar -zxvf rsync-3.0.6.tar.gz
cd rsync-3.0.6
./configure --prefix=/usr/local/rsync
make
make install
2. 服务器B上rsync的配置。
2.1 创建rsyncd.conf文件
vi /usr/local/rsync/rsyncd.conf
文件内容如下:
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
secrets file = /usr/local/rsync/rsyncd.secrets
motd file = /usr/local/rsync/rsyncd.motd
[backup] #这个模块名字在服务器A执行传送文件任务的时候需要
path = /home/backup
comment = backup
uid = root
gid = root
port = 873
use chroot = no
read only = no
list = no
max connections = 2
timeout = 1800
auth users = root
hosts allow = 8.8.8.8(服务器A的IP)
2.2 创建rsyncd.secrets文件
vi /usr/local/rsync/rsyncd.secrets
文件内容如下:
root:123456
secrets文件中存储的是传输数据时使用的用户名和密码,该文件权限必须为600.
chmod 600 /usr/local/rsync/rsyncd.secrets
2.3 创建rsyncd.motd文件
这个文件是sync启动时欢迎信息页面文件位置(文件内容自定义)
vi /usr/local/rsync/rsyncd.motd
Welcome to rsync service!
2.4 运行rsync
/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf
可以使用如下命令查询rsync进程:
ps aux | grep rsync
2.5 配置rsync开机启动
vi /etc/rc.local
在末尾加上 /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf
至此,服务器B上rsync安装配置完成,需要注意的是rsync服务使用873端口,因此需要开启防火墙的873端口。
vi /etc/sysconfig/iptables
在文件中增加如下内容:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
保存退出后重启防火墙
/etc/init.d/iptables restart
3. 在服务器A上安装rsync。
安装过程与服务器B一样。
4. 服务器A上rsync的配置。
服务器A上的配置很简单,只需要创建一个密码文件就可以。
vi /etc/rsyncd.passwd
该文件内容为服务器B上rsyncd.secrets文件中的密码一致,需要注意的是,这个文件中不需要用户名,只需要密码。本例中该文件内容为:
123456
这个文件的权限也必须为600
chmod 600 /etc/rsyncd.passwd
5. 服务器A上运行rsync开始同步文件
/usr/local/rsync/bin/rsync -avH --port=873 --progress --delete /home/mydatabak/test.txt root@8.8.8.8::backup --password-file=/etc/rsyncd.passwd
6. 服务器A设置定时任务传输数据库备份文件
6.1 创建数据库备份脚本
vi autobackupmysql.sh
filename=`date +%Y%m%d`
/usr/local/mysql/bin/mysqldump --single-transaction --master-data=2 --triggers --routines --database dbname -h 127.0.0.1 -P 123 -u test -ptest|gzip >/home/mydatabak/dbname_$filename.gz
6.2 创建文件传输脚本rsync_data.sh
vi rsync_data.sh
/usr/local/rsync/bin/rsync -avH --port=873 --progress --delete /home/mydatabak/name_$(date -d '-1 day' '+%Y%m%d').gz root@8.8.8.8::backup --password-file=/etc/rsyncd.passwd
6.3 创建定时任务
crontab -e
1 5 * * * bash /home/mydatabak/bsh/autobackupmysql.sh
0 0 * * 3 bash /home/mydatabak/bsh/rsync_data.sh
7. 服务器B设置定时任务恢复数据
7.1 创建脚本
vi restore.sh
gzip -d dbname_$(date -d '-1 day' '+%Y%m%d').gz
mysql -utest -h127.0.0.1 -ptest dbname < dbname_$(date -d '-1 day' '+%Y%m%d')
7.2 创建定时任务
crontab -e
0 5 * * 3 bash /home/mydatabak/bsh/restore.sh