容器技术交流

 找回密码
 立即注册
查看: 15224|回复: 14

rsync实现本地定时自动增量备份远程服务器数据

[复制链接]
发表于 2012-3-15 18:04:02 | 显示全部楼层 |阅读模式
本帖最后由 guan6 于 2012-3-16 08:51 编辑

我们的目的:
在公司内部使用rsync定时自动增量备份远程服务器上的数据,包括网站目录、数据库。

为什么要这么做:
对于一些小公司而言,一般只有一台服务器,万一出现故障,那就彻底玩完了。当然,如果你有预算,那再加一台做双机互备最好不过了!但是如果你没有,本地备份也算个折中的办法!
LUM的备份功能,我没有试过,因为我没有闲置的FTP。本地做FTP,又没有固定IP。

我对linux的了解还局限于,登录 > cd xxx > ls,以下所有东西都是边查资料,边测试的!

1、安装srync服务端(我的是centos,如果你是BSD,使用ports安装)
# 先搜索一下rsync具体的名字是什么
  1. yum search rsync
复制代码
1.jpg
# 搜索结果会显示完整的rsync名,接下来安装他,安装很快。
  1. yum install rsync.x86_64
复制代码

2、配置服务端 rsync
# 编辑 /etc/rsyncd.conf(没有就建一个)
  1. vi /etc/rsyncd.conf
复制代码
# 输入如下内容
  1. # 通用配置(指定传输文件UID,pid文件存放位置,日志存放位置)
  2. uid = root
  3. gid = root
  4. use chroot = no
  5. max connections = 4
  6. pid file = /var/run/rsyncd.pid
  7. lock file = /var/run/rsync.lock
  8. log file = /var/log/rsyncd.log
  9. # 以下是所有的模块,每一个模块指定一个需要备份的目录(客户端备份时只需指定模块名就可以了)
  10. [web1]                                #此为模块名称
  11. path = /home/ftp/1520/web1-xxx/              #指定需要备份的目录
  12. ignore errors
  13. read only = true                                           #是否只读
  14. list = false
  15. #hosts allow = 223.21.39.41                       #允许连接的客户端IP
  16. auth users = backup                                    #指定用于连接验证的用户名
  17. secrets file = /etc/rsync.passwd                    #密码校验文件

  18. [sql1]
  19. path = /home/mysql_data/sql1/
  20. ignore errors
  21. read only = true
  22. list = false
  23. #hosts allow = 121.18.126.142
  24. auth users = backup
  25. secrets file = /etc/rsync.passwd
复制代码
# 需要说明的两个配置
# hosts allow    因为客服端在内网,所以这里如果填写IP的话,请填写外网IP。注释掉将允许任何连接,这时请设置一个相对复杂的密码(不建议注释!不重启路由器的话,外网IP不会变的,变了再改一下配置文件呗!)
# auth users    网上很多资料说这里设置的用户名必须是系统真实存在的,经过测试,这里和系统用户一点关系没有,可以随便指定!只用来做客户端的验证!

3、建立密码校验文件 rsync.passwd
  1. vi /etc/rsync.passwd
复制代码
# 按如下格式输入用户名密码
  1. backup:123456
复制代码
#这里建议输入一个较为复杂的密码

4、设置此密码文件所属用户和组都为 root,且权限必须为600
  1. chown root:root /etc/rsync.passwd
  2. chmod 600 /etc/rsync.passwd
复制代码

5、重启rsync
# centos使用xinetd方式运行rsync,所以重启xinetd就OK了。
  1. chkconfig rsync on
  2. service xinetd restart
复制代码
2.jpg
# 这里如果出现错误,大多数是因为没有xinetd。安装一下就ok了。
  1. yum search xinetd
复制代码
3.jpg
  1. yum install xinetd.x86_64
复制代码
#重新执行重启xinetd命令
# 到这里服务端的配置就已经完成了,处于等待连接的状态!下面进行客户端的安装和配置!

6、随便找一台闲置电脑,安装任意系统(我这里安装的centos,rsync有WIN版本,也是可以的)

7、客户端安装rsync
# 安装步骤同上

8、建立密码文件/etc/rsync.passwd
# 客户端不需要配置文件,仅一个密码文件就可以了,且密码文件中只包含密码,没有用户名。
  1. vi /etc/rsync.passwd
复制代码
# 内容如下 (与服务端backup密码一致)
  1. 123456
复制代码

9、修改rsync.passwd 用户权限和组
  1. chown root:root /etc/rsync.passwd
  2. chmod 600 /etc/rsync.passwd
复制代码
#权限必须为600

10、执行同步命令
  1. /usr/local/rsync/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.passwd backup@xxx.xxx.xxx.xxx::web1 /home/ftp/1520/web1-xxx/
复制代码
# backup@xxx.xxx.xxx.xxx::web1,backup为服务端设置的用户名,@后为远程服务器IP地址,web1为服务端配置文件中设置的模块名。
# --delete 表示如果远程服务器删除某文件,同步时也将本地此文件删除,保证文件一致性。
# --password-file 指定客户端密码文件存放位置
# 最后的路径为 将远程文件备份至本地的路径。
# 更多的命令参数可以google一下,能找到很多!

11、编辑一个shell脚本,备份的时候执行,或加入计划任务!
# 脚本可以放在任何位置,这里为了方便管理,统一放在 /usr/local/LuNamp/cmd
  1. cd /usr/local/LuNamp/cmd
  2. vi web_backup.sh
复制代码
# 脚本内容
  1. #!/bin/sh

  2. . "/usr/local/LuNamp/cmd/common.inc"

  3. #[web1]
  4. /usr/local/rsync/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.passwd backup@xxx.xxx.xxx.xxx::web1 /home/ftp/1520/web1-xxx/
  5. SYC_STAT=$?
  6. if [ "$SYC_STAT" != 0 ];then
  7.         showmsg "${color_red}web1 backup error!${color_white}"
  8.         echo $(date +%Y"-"%m"-"%d" "%H":"%M":"%S) '[web1] backup error' >> /var/log/web_backup.log
  9. else
  10.         showmsg "${color_green}web1 backup ok!${color_white}"
  11.         echo $(date +%Y"-"%m"-"%d" "%H":"%M":"%S) '[web1] backup ok' >> /var/log/web_backup.log
  12. fi
复制代码
# 如果你有多个模块,可以拷贝以上代码,增加到下面,修改一下模块名称及备份到本地的目录,还有提示信息就可以了。shell是顺序执行的。
# 脚本里的echo xxx>> /var/log/web_backup.log 是将备份的时间和是否成功的记录存放到一个日志里。方便检查。

12、建立脚本中的日志文件
  1. cd /var/log/
  2. vi web_backup.log
复制代码
# 以后所有备份的记录都放在这里,方便检查
# 日志只有两个状态,一个OK,一个ERROR,其他的我也不会写。哦而看看,能知道哪天没有备份成功就可以了。
4.jpg

13、手动执行备份任务,或者加入计划任务
# 不想加入计划任务的。每次手动执行一下这个脚本就可以了。
  1. /usr/local/LuNamp/cmd/web_backup.sh
复制代码
6.jpg
# 加入计划任务,每天凌晨3点进行备份(如下图)。
  1. crontab -e
复制代码
5.jpg
# 计划任务如何写 google一下

14、如果想备份完成后自动关机,在脚本的最后增加一行
  1. shutdown -h now
复制代码

15、如果想需要备份的时候,备份机自动开机,并在设定的时间备份完成,然后自动关机。
# 使用 网卡网络唤醒,我的本地机器电源没有ATX。所以不行!有的可以自己实验。
这里有网络唤醒的详细介绍:
http://www.360doc.com/content/09/1101/23/314324_8245604.shtml

注: 备份为增量备份,如果数据较大,第一次备份的时间较长,以后就快了,只会备份新增的,或者修改过的文件。
发表于 2012-3-15 19:32:21 | 显示全部楼层
好东西有时间研究研究
发表于 2012-3-16 15:29:56 | 显示全部楼层
O(∩_∩)O谢谢
发表于 2012-3-17 08:55:24 | 显示全部楼层
可不可以限制文件的传输速度?
不然流量过高.大陆那些鸟机房会认为被攻击.
然后断网...
请问可以吗?

点评

加个限速参数就可以了 “--bwlimit=100” 限制传输速度100K/s  详情 回复 发表于 2012-3-17 12:45
发表于 2012-3-17 09:16:26 | 显示全部楼层
这个命令很强大
 楼主| 发表于 2012-3-17 12:45:56 | 显示全部楼层
向阳 发表于 2012-3-17 08:55
可不可以限制文件的传输速度?
不然流量过高.大陆那些鸟机房会认为被攻击.
然后断网...

加个限速参数就可以了 “--bwlimit=100”  限制传输速度100K/s
  1. /usr/local/rsync/bin/rsync -vzrtopg --bwlimit=100 --delete --progress --password-file=/etc/rsync.passwd backup@xxx.xxx.xxx.xxx::web1 /home/ftp/1520/web1-xxx/
复制代码
发表于 2012-3-17 16:47:23 | 显示全部楼层
O(∩_∩)O谢谢
发表于 2012-3-19 18:38:09 | 显示全部楼层
哈哈。谢谢楼主啦
发表于 2012-3-23 00:23:07 | 显示全部楼层
非常感谢,有空研究一下。
发表于 2012-4-18 13:20:10 | 显示全部楼层
不错的教程,感谢分享,有时间研究下
发表于 2012-5-16 12:05:15 | 显示全部楼层
灰常感谢,很好很强大~
发表于 2013-1-9 11:12:43 | 显示全部楼层
哈哈!感谢楼主!
发表于 2013-3-16 11:52:06 | 显示全部楼层
本帖最后由 WEB 于 2013-3-16 11:53 编辑

不错 ,支持一个


能设置某些特定的文件备份,或是排除哪些文件不备份
发表于 2013-8-23 14:26:00 | 显示全部楼层
感谢楼主分享。
发表于 2013-10-5 10:46:30 | 显示全部楼层
学习中... 这个不错
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Archiver|URLOS ( 粤ICP备18087780号 )

GMT+8, 2025-5-8 06:49 , Processed in 0.033620 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表