备份:
全量备份
增量备份
差异备份
备份工具:
cp
scp
tar
gzip
bzip2
rsync:
1.安装
可以直接通过系统光盘源进行安装
yum install rsync
2.工作模式
shell模式:就是执行指令,也叫本地模式
远程shell模式,可以利用ssh协议作为数据传输的承载
列表模式:仅仅列出源的内容 -nv
服务器模式:rsync作为一个守护进程,可以接收客户端的数据传输请求,可以进行数据的获取和上载
参数:
-n:测试模式对于命令的执行效果不缺定一定要使用此参数进行测试之后,在运行
-v:显示详细过程信息
-r:递归
-q:静默模式
-c:checksum文件校验
-a:归档,保留文件属性
-p:保留权限
-t:保留时间戳
-l:保留符号链接
-g:保留属组
-o:保留属主
-D:保留设备文件
-e ssh:使用ssh歇息作承载数据传输
-z:压缩传输数据
--progress:显示进度
--stats:显示状态
--exclude --exclude="filename|dirname"
--exclude="*.txt"
排除此指定内容之外的文件或目录都同步过去
--delete
保证源目录和目的目录里面内容的一致性,如果目的目录中自己多添加了会被删除
rsync etc user@host:dst -rv
rsync etc/ user@host:dst -rv
以上两个指令执行的结果会不一样
没有加上目录后面的斜线会同步目录本身过去
加上目录后面的斜线之后会同步目录下面的所有文件或目录
rsync服务器模式
1.服务器:
rsync,xinetd
2.新建一个配置文件/etc/rsync.conf
一个全局配置
uid=nobody
gid=nobody
use chroot=no
max connections=5
strict modes=yes
pid file=/var/run/rsyncd.pid
log=/var/log/rsyncd.log
多个共享配置(目录)
[data]
path = /path/to/some_dir--------------->填写自己需要同步的目录
ignore errors = yes
read only = no ---->pull
write only = no ---->push
hosts allow=whilte list
hosts deny = black list
黑白名单都不出现使用默认规则,默认为允许
只出现白名单,匹配白名单的允许,其他的使用默认规则
只出现黑名单,匹配黑名单的不允许,其他的使用默认规则
同时出现,匹配白允许,匹配黑不允许,其他使用默认规则
list = false
uid=root
gid=root
auth users = username
secrets file = /etc/rsyncd.passwd
3.密码文件 在/etc/rsyncd.passwd (新建)
格式
username:password 明文
4.客户端测试
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
DST:指定的是rsyncd.conf中的[]中名字
5.步凑
服务端
yum install rsync xinetd
vim /etc/xinetd.d/rsync
disable = no
编写rsync的配置文件
vim /etc/rsyncd.conf
uid=nobody
gid=nobody
use chroot=no
max connections=5
strict modes=yes
pid file=/var/run/rsyncd.pid
log=/var/log/rsyncd.log
[data]
path=/test
ignore errors=yes
read only=no
write only=no
hosts allow=172.16.10.1
#172.16.10.* 是错误
#172.16.10.0/24正确
hosts deny = *
list=false
uid=root
gid=root
auth users=tom
secrets file=/etc/rsyncd.passwd
密码文件
vim /etc/rsyncd.passwd
tom:123456
守护进程启动
/etc/init.d/xinetd restart
netstat -anutlp|grep 873
客户端测试
pull rsync -avzRP user@host::sync_dir_name /tmp/
push rsync -avzRP /tmp user@host::sync_dir_name
不输入密码:rsync -avzRP --password-file=/path/to/rsync_passwd_file
注意密码和配置文件都设为chmod 600 ....
总结:
rsync -avzP --delete /tmp/test tom@192.168.242.132::data 拷贝test目录过去
rsync -avzP --delete /tmp/test/ tom@192.168.242.132::data 老被test目录下的所有内容 不包含test目录本身
rsync -avzRP --delete /tmp/test tom@192.168.242.132::data 会保留tmp/test目录
inotify-tools:
是为linux下inotify文件监控工具提供的一套c接口的开发接口库函数,同时还提供一些列的命令行工具,这些工具可以用来监控文件系统的事件,只要求linux内核支持inotify,inotifywait监控文件或目录的变化,inotifywatch统计文件访问次数
ls /proc/sys/fs/inotify
安装inotify-tools
下载
解压inotify-tools-3.14.tar.gz
tar -xvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr
make
make install
ln -s /usr/lib/libinotifytools.so.0 /usr/lib64/
inotifywait
-h:帮助
@:排除不需要监视的文件或目录
-fromfile:从文件中读取需要监视的文件,排除的文件以@开头
-m:接收到一个事件而不退出,无限期执行,默认是接收到一个事件就退出
-d:和-m一样,还需要指定-outfile也意味着使用-syslog
-o:输出事件到一个文件
-s:输出错误信息到系统日志
-r:监控目录下所有子目录
-q:指定一次不会输出详细信息,指定二次除了致命错误不会输出任何信息
-exclude:正则匹配要排除的文件
-excludei:正则匹配要排除的文件忽略大小写
-t:设置超时时间,0表示无限期执行下去
-e:指定监控事件
-c:输出csv格式
-timefmt:时间格式化可以使用-format中%T格式
-format:
%w:表示发生事件的目录
%f:表示发生事件的文件
%e:表示发生的事件
%Xe:事件以X分割
%T:-timefmt定义的时间格式
inotifywatch:
-h
@
-v输出详细信息
-fromfile
-z:输出表格的列和行
-exclude
-excludei
-r
-t
-e
-a:指定事件以升序排列
-d:降序排列
可监听事件:
access
modify
attrib
close_nowrite
close
open
moved_to
moved_from
move
create
delete
要监控/tmp/test目录及其内部所有文件上发生的create,delete,modify,close_write事件,则使用如下命令
inotifywait -rm --timefmt '%Y-%m-%d %H:%M' --format '%T %w %e %f' -e create,delete,modify,close_write /tmp/test
inotifywatch -vzr -e create,delete,modify,close_write,access,attrib /tmp/test
inotifywatch -vzr -t 60 -e create,delete,modify,close_write,access,attrib /tmp/test
实际生产备份选择方式:
对于应用代码的备份:
版本更新备:
定期备:
对于数据库备份(mysql):
热备 逻辑 完全+增量
1.代码版本更新备
更新之前应该先备份
tar
cp
scp
rsync
还原:
cp
scp
rsync
备份脚本
通过inotify+rsync进行实时有触发条件的同步(热备)
服务前的准备:
需要备份到服务器端:多个共享配置(目录
rsync xinetd 配置文件里面需要配置全局配置和多个共享配置(目录)
需要将实时更新数据到备份服务器段:
rsync inotify (不需要配置只需在/etc/rsync.passwd添加备份端服务器提供服务的用户密码即可)
前提需要安装inotify-tools和rsync的服务器模式
脚本
#!/bin/bash
#
#
inotifywait -rm --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,modify,close_write,attrib /www|while read DATE TIME DIR FILE;do
FILECHANGE=${DIR}${FILE}
cd /www/
rsync -avzRP --delete --progress --stats --password-file=/etc/rsyncd.passwd --exclude-from="/var/log/rule.txt" * up14@192.168.1.110::data &
echo "at ${TIME} on ${DATE} file $FILECHANGE was backup via rstnc" >> /var/log/rule.txt
done
为了让sh inotify.sh一直执行的方式
supervisor推荐
screen
nohup
2.注意备份的时候是否需要打包压缩,是否需要本地异地都有备份,最好给备份文件加上一个标识以便还原的时候方便区分,根据实际情况考虑