使用Rsync备份文件过程及问题解决
折腾了这几天,终于是把小站搞的差不多了,开始着手数据备份的实施。
之前用的国外的服务器,可以很方便的同步备份到Google Drive,换到腾讯云之后,GD失效了。所以只能考虑别的方案。
宝塔面板提供又拍云、七牛、阿里的OSS备份方案,但是对备份到云存储暂时没考虑,因为收费……只剩下FTP
结果FTP不知道怎么回事,能连接到备份服务器,但是总是无响应,手动执行ftp命令进行连接测试,发现总是在执行ls命令时卡住……目前还不知道原因,慢慢再解决吧。
问题已解决:阿里云\腾讯云无法连接到其他FTP的问题解决
所以最后选择了rsync,很久以前用过这货,觉得不方便就放弃了。因为它使用CS架构,配置稍显复杂,只能通过添加crontab来定时执行……
没法,开搞吧,一切为了数据,记录一下使用rsync的简易方法吧。
1.客户端、服务端均需安装rsync
CentOS
yum install rsync -y
Ubuntu\Debian
sudo apt-get install rsync -y
2.服务端配置
如果是数据从服务器A → 服务器B,那么服务器 A 则需要作为 服务端 ,服务器 B 作为 客户端 来连接到A,拉取数据。
新建一个配置文件
vi /etc/rsync/rsyncd.conf
写入配置,其中 bugxia_backup 为自定义配置名称,path=/www/backup 为需要备份的文件夹路径,根据需要修改,保存
pid file = /var/run/rsyncd.pid
port = 873
address = 服务器IP
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow=客户端IP
max connections = 3
log file = /root/rsync.log
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[bugxia_backup]
path = /www/backup
list=yes
ignore errors
auth users = 用户名
secrets file = /etc/rsync/rsyncd.secrets
新建用户名及密码配置文件
vi /etc/rsync/rsyncd.secrets
填入配置并保存(添加的用户名需和上面的配置文件中保持一致,用户名密码以冒号分隔)
用户名:密码
给用户名密码文件配置权限
chmod 600 /etc/rsync/rsyncd.secrets
以daemon方式运行程序
/usr/bin/rsync --daemon --config=/etc/rsync/rsyncd.conf
查看日志文件,检查运行是否正常
cat /root/rsync.log
或
tail -f /root/rsync.log
运行正常则会提示(文末有常见错误及解决方法)
rsyncd version *.*.* starting, listening on port 873
3.客户端配置
新建密码文件,修改为服务端已配置的密码即可,无需用户名
touch /root/rsync.pass
echo "密码" > /root/rsync.pass
chmod 600 /root/rsync.pass
执行同步只需一行命令,其中 bugxia_backup 为上述服务端的自定义配置名称,/www/wwwroot/bugxia 为同步到本地的文件夹路径
rsync -avzP --delete --password-file=/root/rsync.pass 用户名@服务端IP::bugxia_backup /www/wwwroot/bugxia
4.常见错误
服务端log出现如下错误,需要将服务端IP改为0.0.0.0
比如腾讯云,如果使用公网IP则会出现如下错误
bind() failed: Cannot assign requested address
unable to bind any inbound sockets on port 873
客户端出现错误,需要检查服务端rsync是否成功开启,并检查防火墙是否放行873端口
rsync: failed to connect to *.*.*.*: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(128)
权限错误,需要给服务端和客户端的密码文件配置600权限
ERROR: password file must not be other-accessible