第11章Linux下的备份和恢复
了解Linux下的备份种类和备份策略
掌握Linux下的备份方法
Linux下的数据备份种类
系统备份
用户备份
日志备份
数据库备份
用户数据备份
Linux下的数据备份策略
完全备份
增量备份
累积备份
磁盘镜像
网络备份
使用rsync备份
rsync(remote synchronize)
⚫ rsync是一款开源,快速,多功能的可实现增量的本地或远程的数据镜像同步备份的优秀工具。 适用于多个平台。从软件名称可以看出来是远程同步的意思(remote sync)可实现全量备 份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用。
⚫ 支持本地复制,或者与其他SSH、rsync主机同步
⚫ 官方网站:http://rsync.samba.org/
⚫ rsync监听端口:TCP 873
使用rsync备份
rsync功能特点
⚫ 不同的分区
⚫ 不同的硬盘
⚫ 不同的计算机
⚫ 仅传输不同之处
⚫ 安全数据传输
⚫ 保持所有权
使用rsync备份
rsync传输方式及应用场景
⚫ 上传(推)
◆ 所有主机推送本地数据至Rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)
◆ 机器量不是很多的时候,可以使用推送
⚫ 下载(拉)
◆ rsync备份服务端拉取所有主机上的数据,会导致备份服务器开销大
◆ 机器量很大的时候,推和拉协同使用
rsync的传输模式
本地方式
⚫ 单个主机本地之间的数据传输,类似cp命令
远程方式
⚫ 通过ssh通道传输数据,类似scp命令
守护进程
⚫ 服务,持续后台运行
rsync命令
rsync命令的用法
⚫ 基本格式:rsync [选项] 原始位置 目标位置
⚫ 常用选项:
◆ -a:归档模式,递归并保留对象属性,等同于 -rlptgoD
◆ -v:显示同步过程的详细(verbose)信息
◆ -z:在传输文件时进行压缩(compress)
◆ -H:保留硬连接文件
◆ -A:保留ACL属性信息
◆ --delete:删除目标位置有而原始位置没有的文件
◆ --checksum:根据对象的校验和来决定是否跳过文件
rsync的本地传输
本地备份文件同步
⚫ 格式:rsync [选项] 原始位置 目标位置
[root@centos7 ~]# rsync -av /boot /tmp/boot
sending incremental file list
boot/ boot/.vmlinuz-3.10.0-1062.el7.x86_64.hmac boot/System.map-3.10.0-1062.el7.x86_64 boot/config-3.10.0-1062.el7.x86_64 boot/initramfs-0-rescue-71170756d7cf4565bc28bfba47de8eed.img
rsync的远程方式
上传(推)
⚫ 格式:rsync [选项] 目标位置(本地) user@host:原始位置
[root@client ~]# rsync -av /tmp/rootbak root@192.168.1.20:/root/
远程方式存在的缺陷:
⚫ 需要使用系统用户(不安全)
⚫ 使用普通用户(权限存在问题)
⚫ 需要走ssh协议
rsync的远程方式
下载(拉)
⚫ 格式:rsync
[选项] user@host:原始位置 目标位置(本地)
[root@client ~]# rsync -av root@192.168.1.20:/root/ /tmp/rootbak
created directory /tmp/rootbak
delta-transmission enabled
./
……
anaconda-ks.cfg
test.txt
……
[root@centos ~]# ls /tmp/rootbak/
anaconda-ks.cfg test.txt
rsync的守护进程方式
上传
[root@client ~]# rsync -avz /mnt/ rsync_backup@192.168.1.20::backup/
下载
[root@client ~]# rsync -avz rsync_backup@192.168.1.20::backup/ /mnt/
原始位置的两种表示方法
⚫ 用户名@主机地址::共享模块名 rsync_backup@192.168.1.20::backup/
⚫rsync://用户名@主机地址/共享模
rsync://rsync_backup@192.168.1.20/backup/
上传下载
服务
配置rsync备份服务器
rsync的配置文件-1(全局配置)
⚫ /etc/rsyncd.conf
uid = rsync // 运行进程的用户
gid = rsync // 运行进程的用户组
port = 873 // 监听端口
fake super = yes // 无需让rsync以root身份运行,允许存储文件的完整属性
use chroot = no // 关闭假根功能
max connections = 200 // 最大连接数
timeout = 600 // 超时时间
ignore errors // 忽略错误信息
read only = false // 对备份数据可读写
list = false // 不允许查看模块信息
auth users = rsync_backup // 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.password // 定义
rsync服务用户连接认证密码文件路径
log file = /var/log/rsyncd.log // 日志文件
配置文件
配置rsync备份服务器
rsync的配置文件-2(局部配置)
⚫ /etc/rsyncd.conf
[backup] // 定义模块信息
comment = welcome to backup! // 模块注释信息
path = /backup // 定义接收备份数据目录
创建密码文件
配置rsync备份服务器
创建虚拟用户密码文件(用于客户端连接时使用的用户)
⚫ 创建虚拟用户和密码文件,并赋予600权限
[root@server ~]# echo "rsync_backup:123456" > /etc/rsync.password
[root@server ~]# chmod 600 /etc/rsync.password
修改密码文件的权限
配置rsync备份服务器
创建用户
⚫ 运行rsync服务的用户身份
⚫ 创建rsync账户,不允许登录不创建家目录
[root@server ~]# useradd -M -s /sbin/nologin rsync
⚫ 创建备份目录(尽可能磁盘空间足够大),授权rsync用户为属主
[root@server ~]# mkdir /backup
[root@server ~]# chown -R rsync.rsync /backup/
创建用户
更改数组属主
rsync服务测试验证
将客户端的/etc/passwd 推送至 rsync服务端[backup]
[root@client ~]# rsync -av /etc/passwd
rsync_backup@192.168.1.20::backup
Password: //输入rsync_backup用户的密码
sending incremental file list
passwd
sent 2,506 bytes received 43 bytes 7.01 bytes/sec
total size is 2,410 speedup is 0.95 p
将rsync服务端模块[/backup]的内容下载至本地
[root@client ~]# rsync -av rsync_backup@192.168.1.20::backup /tmp Password: //输入rsync_backup用户的密码
………
passwd
进入backup目录
rsync服务测试验证
同步时不输入密码
⚫ 第一种方式,sersync
[root@client ~]# echo "123456" > /etc/rsync.password
[root@client ~]# chmod 600 /etc/rsync.password
[root@client ~]# rsync -av rsync_backup@192.168.1.20::backup /tmp --password-file=/etc/rsync.password
receiving incremental file list
……….
⚫ 第二种方式:写脚本时使用 export RSYNC_PASSWORD=123456 设置RSYNC_PASSWORD环境变量=123456 这里的1是密码,密码要和服 务端的一致
创建测试文件
创建文件
创建有内容的文件
创建链接文件
配置rsync备份服务器
启动服务
设置开机启动
查看是否设置启动
rsync实时同步
定期同步的不足
⚫ 执行备份的时间固定,延迟明显、实时性差
⚫ 当同步源长期不变化时,密集的定期任务是不必要的
实时同步的优点
⚫ 一旦同步源出现变化,立即启动备份
⚫ 只要同步源无变化,则不执行备份
关于inotify
Linux内核的inotify机制
⚫ 从版本2.6.13开始提供
⚫ 可以监控文件系统的变动情况,并作出通知响应
⚫ 辅助软件:inotify-tools
rsync+inotify实时同步
调整inotify内核参数
⚫ max_queue_events:监控队列大小
⚫ max_user_instances:最多监控实例数
⚫ max_user_watches:每个实例最多监控文件数
[root@client ~]# vi /etc/sysctl.conf
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@client ~]# sysctl –p //更新并查看该参数是否生效 fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
做备份
编辑文件
添加一项
检查
rsync+inotify实时同步
配置rsync服务器
[root@server ~]# vi /etc/rsyncd.conf
20 [webbak]
21 comment = home directory backup
22 path = /webbak
[root@server ~]# mkdir /webbak
[root@server ~]# chown -R rsync.rsync /webbak/
[root@server ~]# systemctl restart rsyncd
服务器端添加模块
创建目录更改属主属组目录为rsync
重启服务
rsync+inotify实时同步
安装inotify-tools
[root@client ~]# tar zxf inotify-tools-3.14.tar.gz -C /usr/src/ [root@client ~]# cd /usr/src/inotify-tools-3.14/
[root@client inotify-tools-3.14]# ./configure
[root@client inotify-tools-3.14]# make
[root@client inotify-tools-3.14]# make install
客户端:
源码包安装
进入目录
配置安装
安装
rsync+inotify实时同步
监控/website目录
[root@client inotify-tools-3.14]# inotifywait -mrq -e
modify,create,move,attrib,delete /website
/website/ CREATE index.html
/website/ MODIFY index.html
^C
第一个终端
创建目录
启动监控
第二个终端
在webssite里面创建文件
第一个终端观看监控
连接rsync测试
[root@client inotify-tools-3.14]# rsync -azH --delete
--password-file=/etc/rsync.password /website/
rsync_backup@192.168.1.20::webbak
终端一测试ryscns的连接
去服务器查看
客户端
终端二
服务器终端一
创建文件
客户端
终端一,可以监控
rsync+inotify实时同步
编写一个脚本实现同步
[root@client inotify-tools-3.14]# vi /opt/inotify_rsync.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /website/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/rsync.password /website/
rsync_backup@192.168.1.20::webbak"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
$RSYNC_CMD
done
粘贴到客户端的opt下
打开配置文件
rsync+inotify实时同步
配置脚本开机自动运行
[root@client ~]# chmod a+x /opt/inotify_rsync.sh
[root@client ~]# echo ‘/opt/inotify_rsync.sh &’ >> /etc/rc.d/rc.local //设置开机自动运行该脚本
[root@client ~]# chmod a+x /etc/rc.d/rc.local
[root@client ~]#reboot
[root@client ~]# pgrep inotify_rsync.s //可以使用此命令查看脚本是否在运行,如果在运行,会显示其进程号
添加执行权限
做一个备份
追加文字
reboot
添加执行权限
然后rebooot
监控进程
进入目录
服务器:
终端一
dump和restore
dump与restore命令使递增备份与差异备份很容易实现。dump可以取得目录内容, restore可以交互式将备份文件返回原址。
用dump命令存档 ,用于备份ext文件系统
用restore进行恢复
dump备份实例
dump命令
⚫ 格式: dump -0uf 备份文件存放的路径 要备份的目录
[root@centos7 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb1 ext4 976M 2.6M 907M 1% /extfs1
[root@centos7 ~]# dump -0uf /tmp/extfs1.bak /extfs1
DUMP: Date of this level 0 dump: Mon Oct 21 21:39:27 2019
DUMP: Dumping /dev/sdb1 (/extfs1) to /tmp/extfs1.bak
DUMP: Label: none
DUMP: Writing 10 Kilobyte records
………
dump实现备份策略
完全备份
⚫ dump -0uf
增量备份:使数字递增即可
⚫ dump -1uf
⚫ dump -2uf
⚫ dump -3uf p
累加备份(差异备份):一直使用非0数字即可
⚫ dump -5uf
⚫ dump -5uf
⚫ dump -5uf
练习
首先添加1g硬盘
查看
fdisk
创建分区
格式化
创建用户目录
挂载
查看
创建测试文件
rpm查看
安装
rpm dump
全备
重新为目录添加文件
创建增量备份
restore恢复备份的文件
恢复整个文件系统
⚫ 模拟故障,删除所有文件
[root@centos7 ~]# ls /extfs1 dir1 file1 lost+found
[root@centos7 ~]# rm -rf /extfs1/*
[root@centos7 ~]# ls /extfs1
⚫ 注:还原文件时,要进入备份的目录进行还原,保证还原到文件原来的位置
例如:
删除
查看
restore恢复备份的文件
进入restore还原模式
⚫ 格式:restore -if 备份文件
[root@centos7 ~]# restore -if /tmp/extfs1.bak
restore > help
Available commands are:
ls [arg] - list directory
cd arg - change directory
pwd - print current directory
add [arg] - add `arg' to list of files to be extracted
delete [arg] - delete `arg' from list of files to be
extracted extract - extract requested files
………
restore恢复备份的文件
restore恢复模式指令
⚫ ls 列出文件或目录列表
⚫ add 标记要还原的文件
⚫ extract 还原标记过的文件(询问时输入1和n)
⚫ quit 退出
例如:
恢复还原
restore恢复备份的文件
restore恢复文件
[root@centos7 ~]# cd /extfs1
[root@centos7 extfs1]# restore -if /tmp/extfs1.bak
restore > ls
dir1 file1 lost+found/
restore > add *
restore > ls
*dir1 *file1 *lost+found/
restore > extract
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
set owner/mode for '.'? [yn] n
restore > quit
[root@centos7 extfs1]# ls
dir1 file1 lost+found
例如:
恢复增量
另一种文件系统
Xfs文件系统dump和restore
做备份
恢复