11章Linux下的备份和恢复

了解Linux下的备份种类和备份策略 

掌握Linux下的备份方法

Linux下的数据备份种类 

系统备份 

用户备份 

日志备份 

数据库备份 

用户数据备份

Linux下的数据备份策略 

完全备份 

增量备份 

累积备份 

磁盘镜像 

网络备份

使用rsync备份 

rsyncremote synchronize

⚫ rsync是一款开源,快速,多功能的可实现增量的本地或远程的数据镜像同步备份的优秀工具。 适用于多个平台。从软件名称可以看出来是远程同步的意思(remote sync)可实现全量备 份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用。

支持本地复制,或者与其他SSHrsync主机同步

官方网站: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 // 无需让rsyncroot身份运行,允许存储文件的完整属性

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

dumprestore命令使递增备份与差异备份很容易实现。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 还原标记过的文件(询问时输入1n

⚫ 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文件系统dumprestore

做备份

 

 

恢复