备份还原
脚本自动备份
备份的原则
备份什么:数据、配置、操作系统、运行环境
往哪里备份:本地、远程、异地三个副本
怎么恢复备份:备份系统自动恢复、人工手动恢复
Shell脚本备份
最简单的备份,在需要备份的服务器上挂载一个存储空间,挂载到 /mnt 目录下,定期的将重要的资料拷贝到存储空间中。可以写一个shell脚本自动备份。
手动备份
备份脚本实例:
1 |
|
然后赋予脚本文件可执行权限
1 | chmod u+x backup.sh # 赋予脚本文件可执行权限 |
验证备份
1 | tar -tzvf /backup/backup.tgz |
还原
1 | cd / |
cron计划任务
- 计划任务,在指定时间执行指定命令
- 全局配置文件
/etc/crontab
配置:
1 | crontab -l # 查看当前用户的计划任务 |
备份计划
比如做半年的数据备份
- 一两个月为周期滚动备份
- 每月1日执行备份
- 每周六执行周备份
- 每天进行日备份
- 6个日备份 +4个周备份 + 2个月备份
缺陷:
- 每个备份都是完整的备份
- 备份时间长,磁盘空间占用量大
1 |
|
Rsync
Rsync用法
介绍
- Linux下众多备份工具,但是rsync是必须掌握的一个
- 在两个目录或两个主机之间同步文件
- 从源同步到目标,但不双向同步
- 支持增量备份,节省时间带宽源
增量备份(incremental backup)是备份的一个类型,是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。
简单使用
将源里的文件同步到目标文件。我们把源称为文件服务器,给我们提供服务器;目标好比客户端,从文件服务器上同步到我们的机器上。
文件服务器
1 | # 创建文件做试验 |
客户端同步
rsync在Linux发行版上基本上都默认安装的,如果没有在ubuntu上安装
1 | sudo apt install rsync |
- rsync默认是明文协议,我们可以利用ssh加密的特性来使用。
- 也可以使用ssh 基于密钥的方式
- 默认使用增量接受传输文件的方式,receiving incremental file list
1 | rsync -azP -e ssh cwz@172.16.247.128:~/sampledir/ backup/ |
注意点:
- 服务器新增、修改文件后再次运行次命令,只有变更的部分同步。
- 服务器删除文件后再次运行此命令,客户端不同步删除动作。
同步本地文件夹
rsync也支持在同一台机器上不同目录下同步
1 | rsync /var/log/mysql ~/mysql_log_backup |
计划任务
1 | crontab -e |
rsync的参数
1 | rsync -azP -e ssh cwz@172.16.247.128:~/sampledir/ backup/ |
- -r 递归拷贝目录内容,但不保留权限
- -l 拷贝符号链接
- -p 保留权限
- -g 保留组所有者
- -o 保留用户所有者
- -D 保留设备文件
- -v 显示详细信息
- -a -a参数=rlptgoD的总和
- -z 压缩
- -P 生成进度文件,实现进程报告和断电续传
- -e 指定远程shell类型,默认rsync是明文传输数据
- —exclude filename 指定排除的文件名,这样就不同步filename文件
- —exclude-from exe.txt 将不同步的文件名放入exe.txt文件,这样就不会同步多个文件
- —include filename 指定包含的文件名
- —include-from exe.txt 指定多个文件
SSH使用非标准端口
1 | rsync -zaP -e "ssh -p 2222" source destination # ssh在2222端口 |
rsync默认不删除目标文件
- —delete 镜像源的内容,源文件删除目标文件也删除
- —backup 删除 / 覆盖前 备份源文件(改名防删除)
- —backup-dir 指定备份路径
- —remove-source-files 成功传输后删除源文件
- —dry-run 模拟执行命令,并输出结果(并不修改真正的文件)
1 | rsync --remove-source-files -azPv src/ dest/ |
增量备份
1 | touch backup.sh |
其他工具
rsync本来不能双向同步
双向同步工具
1 | sudo apt install unison |
需要手动
实时同步工具
1 | sudo apt install lsyncd # lsyncd可以实现本地文件夹与云端文件夹实时同步 |
- 实时监视本地文件目录变化
- 默认使用rsync实现文件同步
SCP / SSHF
Bacula
Bacula介绍
- 基于网络的开源备份、换源、验证软件
- 对标商业备份软件的功能
- 客户端支持windows、Linux、Unix、Mac
- 是由多个开源工具组合而成
软件架构
- Director:主进程,控制所有备份、恢复、验证、归档操作,是核心组件
- Console:管理员用来和Director进行通信的接口程序,是一个操作界面,分为三种类型:
- 基于文本的命令行版本,具有完全的功能
- 基于Gnome GTK+的GUI版本(大部分功能)
- wxWidgets GUI版本(大部分功能)
- File Daemon:文件后台进程,是Bacula客户端程序,安装在需要备份的计算机上。
- 负责在Director请求时提供文件属性和数据
- 恢复阶段负责恢复文件和数据,以后台进程的形式运行
- Storage Daemon:读写备份存储介质,执行数据存储和恢复
- Catalog:为所有备份文件维护索引和卷数据库
- 快速定位和恢复归档文件
- 默认情况下支持MySQL、PostgreSQL、SQLite
- 摘要信息,包含备份任务、客户端、被备份的文件以及它们存放在哪个卷上
- 这是Bacula区别于简单备份工具的关键
- Monitor:允许监视Director、File Daemon和Storage Daemon,仅限GTK+ GUI可用。
其他特性
- Bacula可以单机部署,也可以分布式部署
- 最新版本支持一次性写入介质和Amazon S3
- 适合大型环境
安装Bacula
Bacula是模块化的,每个组件都可以独立安装。
安装数据库
1 | sudo apt install bacula-director-pgsql # 安装pgsql和连接数据库的脚本, 安装过程数据库密码不设,系统随机成功 |
安装Director
1 | sudo apt install bacula-director # 安装过程会强制安装Postfix |
修改帧听的ip地址
1 | sudo vi /etc/bacula/bacula-dir.conf # 主配置文件 |
重启服务
1 | sudo systemctl restart bacula-director.service |
安装Storage Daemon
1 | sudo apt install bacula-sd |
修改帧听ip
Storage Daemon默认是帧听在 TCP 9103
1 | sudo vi /etc/bacula/bacula-sd.conf # SD的配置文件 |
重启服务
1 | sudo systemctl restart bacula-sd.service |
安装File Daemon
1 | sudo apt install bacula-fd |
修改帧听ip
默认帧听在 TCP 9102
1 | sudo vi /etc/bacula/bacula-fd.conf # FD配置文件 |
重启服务
1 | sudo systemctl restart bacula-fd.service |
在网络中其他计算机上安装FD
windows客户端下载FD:https://sourceforge.net/projects/bacula/files/
配置FD
如果客户端(比如说ubuntu桌面版)想和Bacula服务端进行通信,必须要经过身份认证。它们身份认证的方法是通过password的机制。
客户端配置
1 | sudo vi /etc/bacula/bacula-fd.conf |
服务端配置
在Director添加客户端配置
1 | sudo vi /etc/bacula/bacula-dir.conf |
服务器端要指定客户端的名字,使用客户端的密码
客户端上要指定服务端的名字,两端的密码保持一致。
安装Console
1 | sudo apt install bacula-console #安装 |
Bacula备份
一些概念的介绍
- Directive:指令,配置文件中定义资源中的语句或记录
- 全部备份:数据完整的备份。
- 差异备份:基于上一次完整备份后发生变化的内容的备份。
- 增量备份:基于上一次完整、增量、差异备份之后的变化。
- 备份任务 JOB(备份、还原、验证)
- FileSet:备份什么
- Client:备份哪台机器
- Schedule:备份时间(周期)、备份类型(每周一全备,其余增量)
- Pool:往哪里备份(一组volume)
- Priority:多个JOb使用相同的schedule时,优先级决定谁先执行
- JobDefs:Job模板,定义Job通用默认指令,可被Job定义覆盖
- 默认包含一个Catalog的备份Job
- Pools / Volumes / Labels
- Volumes:一个物理磁带或一个文件,备份数据写入其中
- Pool:组合的volumes
- 使得备份不受单个卷(磁带)长度的限制
- 备份时指定使用的 池 作为存储单元
- Bacula依次使用池中的卷,或者 提示你挂载下一个卷
- Pool资源在DIrector配置文件中定义,但由Catalog实际维护,包含组成池的所有卷的信息
- 可分别创建每日备份池(增量备份)、每周备份池(全备)
纵览Director配置文件
1 | sudo vi /etc/bacula/bacula-dir.conf |
- 有一个默认的JobDefs。存储storage,使用文件类型File1;
- 在Job中定义备份任务,如果与JobDefs的不同,可以重新进行定义
添加Label Format 指定备份客户端
1 | Pool { |
指定备份文件
1 | sudo vi /etc/bacula/bacula-sd.conf |
运行备份
1 | bconsole |
查看备份任务状态
1 | bconsole |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 伊甸园!