首页 > 代码库 > 备份方式

备份方式

完全备份:完整的备份业务数据,每次都对整个业务系统进行备份
优点:当数据丢失时,只要用一盘磁带(灾难发生前一天的本分磁带)就可以恢复丢失的数据
缺点:备份数据大量重复,占用大量的磁带空间,增加成本。其次,备份数据量很大,备份所需的时间较长。
增量备份:以上次备份为基准的备份方式,即只对每天新增的或修改过的数据进行备份。例如,sunday进行一次完全备份,monday备份从sunday to monday之间增加的数据,tuesday备份从monday to tuesday之间增加的数据。
优点:只备份当天更新或者增加的数据,数据量小,节省磁带空间,缩短备份时间
缺点:当灾难发生时,数据的恢复过程比较麻烦。备份的可靠性差。在这种备份方式下,各个备份间的关系就像一个链子,环环相扣,其中任何一个备份出了问题都会导致整条链子脱节。
差异备份:以完全备份为基准的一种备份方式。兼容上述两种方式的特点
1.无需每天都对系统做完全备份,备份数据量小,备份所需时间短,节省空间
2. 灾难恢复时方便,只需要两个备份(完全备份和灾难发生前一天的备份),就可以将系统恢复
使用tar命令备份

tar命令可以调用bzip2或者gzip进行压缩,只限于本机备份

  1. 增量备份

    tar命令增量备份的基本语法
    tar -g /back_dir/snapshot -czf /back_dir/opt_fullback_$(date +%F).tar.gz /back_dir       -g /back_dir/snapsho 指定一个快照文件,名字可以随意。
    snapshot 是一个纯文本文件,以 UNIX 时间记录备份的时间戳。
    这个文件一般是第一次全备时自动创建,也可以手动创建。
    如果你手动创建这个文件,那 tar 就只会备份在这个时间戳之后修改过的文件。

    1. 第一次完全备份

      $ tar -g /backup/snapshot -czf /backup/opt-full-$(date +%F).tar.gz /opt
      tar: 从成员名中删除开头的“/”                                  //创建全备

      $ cat /backup/snapshot
      GNU tar-1.23-2
      13629864295739056140136298623535128796520491044482/optDdbbakYiptables.saveYsnapsh

    2. 第一次增量备份
      $ tar -g /backup/snapshot -czf /backup/opt-1-$(date +%F).tar.gz /opt
      tar: 从成员名中删除开头的“/”   

      注意:一定要每次增量备份用-g指定快照,即使第一次用后面没有使用,也不是增量备份

               增量备份每次都会对目录类进行备份,再备份新增加的文件

    3. 查看备份内容

      $ tar -tf /backup/opt-full-2012-06-05.tar.gz

    4. 恢复备份文件:第1次完全备份+第2次增量备份+第N次增量备份+最后一次增量备份

      全部恢复后,会得到所有的备份累加的效果

  2. 差异备份

    tar 命令差异备份的基本语法
    tar -N ‘完整备份的时间’ -czf /back_dir/opt_fullback_$(date +%F).tar.gz /back_dir
    -N 后面接完整备份的时间,格式为“2012-06-05 18:37:00”以完全备份文件的时间为准来计
    算差异。

    1. 第一次完全备份

      $ tar -czf /backup/opt.full.$(date +%F).tar.gz /opt
      tar: 从成员名中删除开头的“/”               //制作完全备份

      $ stat /backup/opt.full.2012-06-05.tar.gz //查看完整备份的时间

    2. 第一次差异备份

      $ tar -N ‘2012-06-05 18:45:57‘ -cvzf /backup/opt.1.$(date +%F)tar.gz /opt
      注意:-N 后面的内容是通过stat查看到的完整备份的时间

              以后的差异备份都会对目录类进行备份,对修改过的文件(新增加的文件以及修改过文件的内容)进行备份,如果删除了一些文件,再次差异备份就不会有这个文件

    3. 查看备份内容

      和增量备份查看方式相同

    4. 恢复备份文件:完整备份+最后一次差异备份,是累加的效果

备份工具dump备份

优点:

  1. 备份可以跨多卷磁带

  2. 能备份任何类型的文件,甚至是设备

  3. 备份时,文件的权限,属主,属组,修改时间等都会被保存

  4. 能够正确处理从未包含任何数据的文件块

  5. 能够做增量,差异备份

  6. 多用在文件系统的备份

dump基本语法

dump -level -u -f 备份文件名 需要备份的对象
-level: 表示备份的级别,0表示完整备份,1表示当前和0比较的差异部分,2表示当前和1比较的差异部分。备份文件系统的级别是0-9,备份文件夹只能用0级别。 总结来说,完整备份用0级别,差异备份都使用同一大于0的级别(如果后面有一次的级别不同,就是对上一次备份的增量备份),增量备份用2-9依次级别

-u:将备份的时间记录到/etc/dumpupdates 文件中,如果要使用增量或者差异备份方案,一
定要使用-u 选项,如果备份文件夹不能使用-u 选项。
-f:指定备份生成的文件
-j 或者-z:压缩备份

查看备份文档中的文件和还原命令 restore
-t:查看备份文件的内容
-r:查看或恢复整个文件系统
-f:要查看或恢复的备份文件
备份恢复
$ cd 恢复目录
$ restore -rf /tmp/backup/full.dmp
$ restore -rf /tmp/backup/add_001.dmp

  1. 备份文件夹

    $ dump -0 -f full.dump /test/*   

    $ restore -rf /backup/full.dump     恢复到当前路径下,生成两个,restoresymtable  test

    ./lost+found: (inode 11) not found on tape

    注意:备份文件夹只能做完全备份,只能用0级别

            备份文件夹的文件夹后面有没有/,都一样,备份的是目录以及目录下的内容

  2. 备份分区

    备份/boot 分区:注意/boot 目录必须是单独分区

    $ dump -0u -f /tmp/backup/boot.dump /boot             // 完整备份/boot

    $ dump -u1 -f /tmp/backup/add_001.dump /boot         //增量备份

    $ dump -u2 -f /tmp/backup/add_002.dump /boot          //再次增量备份

  3. 查看和恢复备份

    $ restore -tf /tmp/backup/boot.dump

    $ rm -rf /boot/*                    //破坏/boot/分区的所有文件
    $ cd /boot                                //还原时需要进入到还原点,否则是当前路径
    $ restore -rf /tmp/backup/boot.dump               //恢复到完整备份时的状态

    如果只想恢复备份对象中的部分文件怎么办呢?可以使用 restore 的交互模式
    $ restore -if /tmp/backup/add_002.dump
    restore > ?            //查看当前模式下可以使用的命令

    restore > add test2          //add 添加需要恢复的文件,ls 列出的对象前面会有个*标记
    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                      //退出交互模式

    恢复部分文件还可以使用-x 选项

使用rsync进行备份

rsync 是一个类unix系统下的远程文件同步和传输工具,是用rsync算法提供一个客户端和远程文件同步的快速方法

  1. 可以镜像保存整个目录树和文件系统

  2. 可以很容易做到保持原来文件的权限、时间、软硬链接等等

  3. 无需特殊权限即可安装

  4. 优化的流程,文件传输效率高

  5. 可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的sicket连接

  6. 支持匿名传输

  7. 不能实时监测、同步数据,可以通过crontab的计划任务进行触发同步,但是两次触发动作会有时间差,导致server和client数据可能出现不一致,无法在应用故障时完全的恢复数据

软件安装和启动,要记得安装xinetd服务

修改/etc/xinetd.d/rsync中的disable=no

  1. 在Linux单机进行备份

    1. 增量同步
      rsync -av /tmp/test /tmp/backup
      rsync -av /tmp/test/ /tmp/backup
      注意:比较这两条命令的区别,源目录不加/结尾表示将 test 目录复制到 backup 目录下,源目录加/结尾表示将 test 目录下的内容复制到 backup 目录下。

      增量备份只能对修改增加文件同步,不能对删除的文件进行同步。增加的若是文件的内容,则会覆盖原先的已有的文件,若只是改变文件的文件名那么备份后的目录下会新增一个改名之后的文件而不会把原先已有的那个文件进行改名。

    2. 镜像同步
      rsync -av --delete /tmp/test/ /tmp/backup
      可以对删除的文件进行同步,使用这个就会和源文件内容完全一致。

  2. Linux进行远程备份(依赖sshd)

    环境要求:服务器必须打开sshd服务

    客户端命令:

    $ rsync -av root@10.10.10.1:/tmp/test/ /tmp/backup
    $ rsync -av --delete root@10.10.10.1:/tmp/test/ /tmp/backup
    $ rsync -av -e "ssh -p 5432" root@10.10.10.1:/tmp/test/ /backup
    解决 ssh 端口不是默认 22 的问题,-e 为指定使用 ssh
    建议使用 ssh 密钥验证,可以无需每次输密码
    都是切换到服务器上进行操作,增加文件可增量可镜像同步,删除文件镜像同步

  3. Linux进行远程备份(使用rsync服务)

    环境要求:服务器必须开启rsync服务

    1. 首先在server端创建一个/etc/rsyncd.conf文件,关于配置方法,man rsync.conf

      $ vi /etc/rsyncd.conf
      #全局配置
      motd file= /etc/rsyncd.motd       //指定客户端访问显示的欢迎信息可以自定义文件内容
      port=873
      address=0.0.0.0
      uid=nobody                  //定义同步时 rsync 进程用户 id
      gid=nobody  
      read only = yes              //是否只读,禁止客户端写入服务器
      #局部配置
      [share]                          //定义一个备份目录,语法和 samba 类似
      path=/tmp/test

    2. 重启xinetd服务,检查端口是否打开  lsof -i:、netstat -nutlp

    3. 客户端测试

    4. 服务器安全机制

      hosts allow = 10.10.10.2 10.10.10.10
      hosts deny = 0.0.0.0/0.0.0.0 10.10.10.0/255.255.255.0
      注意 IP 地址的格式,在您可以指定单个 IP,也可以指定整个网段,能提高安全性。

      格式是 ip 与 ip 之间、ip 和网段之间、网段和网段之间要用空格隔开。

    5. 用户安全认证机制:
      auth users = may, sun
      secrets file = /etc/rsyncd.secrets (plain text, not readable)
      文件内容格式为”用户名:密码“,创建的文件必须是其他人不可读的权限才能使这个文
      件正常运行。chmod 600 /etc/rsyncd.secrets
      主机安全和用户认证参数可以放到全局中,也可以放在共享目录中,
      共享目录不是真的路径地址,用另外一个名称代替真实路径名称,参考 samba。

    6. 配置安全机制和安全认证机制的测试

      1. 列出服务器共享信息
        $ rsync --list-only rsync://10.10.10.1/
        $ rsync --list-only rsync://10.10.10.1/share/grub/
        想要进入这个目录,源需要存在这个目录,即/tmp/test/grub

      2. exclude 用法:可以把不想同步的文件或目录排除在外。
        $ rsync -av --exclude=grub/ --exclude=ld.so.conf rsync://10.10.10.1/share/ /tmp/backup
        $ rsync -av --exclude-from=/tmp/backup/ex.rsync rsync://10.10.10.1/share/ /tmp/backup
        exclude-from 指向的是本机目录的列表,将排除的文件或者目录写入一个文件中一起读入,
        一行一个文件或者目录。

      3. 同步,为测试结果清楚,清空原有的数据

        $ rsync -av rsync://10.10.10.1/share/ /tmp/backup //开始同步
        rsync: send_files failed to open "/grub/grub.conf" (in share): Permission denied (13)
        //注意由于 rsync 使用 nobody 用户所以文件必须要有相应的权限才可以同步
        切换道服务器:$ chmod o+r /tmp/test/grub/grub.conf

        1. @ERROR: auth failed on module sharersync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=2.6.8]

          rsync: could not open password file "/etc/rsyncd.pass": No such file or directory (2)

          客户端没有这个文件,但是不影响结果

        2. @ERROR: access denied to share from unknown (10.10.10.3)
          rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=2.6.8]
          直接被拒绝,hosts allow & hosts deny

        3. 服务器的/etc/rsync.pass的问题(没有这个文件或者是帐号密码)

        4. 切换到服务器:$ chmod 600 /etc/rsyncd.scrt //修改服务器的认证文件的权限

        5. rsync -av rsync://admin@10.10.10.1/share/ /tmp/backup //用 admin 用户去同步

        6. rsync -av --password-file=/etc/rsyncd.pass rsync://admin@10.0.252.1/share/
          利用--password-file(在客户端)=/etc/rsyncd.pass 指定一个密码文件,可以同步时自动输入密码。

               rsyncd.pass 文件内容就是密码 123,权限必需是 600,修改这个文件不需要重启服务

rsync+lsyncd 实现服务器之间文件实时同步
工作原理:监视client的目录,当源数据有文件或目录更新时,更新本地文件或目录到server,保持实时文件同步,但是它更新数据是需要server运行rsync demon

lsyncd 的功能:

  1. 开源软件 lsyncd 采用 inotify 原理监听某一目录,如果目录内发生增、删、改、利用 rsync协议自动同步到多个服务器。

  2. 可以本地多点目录的监控并实现到远程目录的同步。

  3. 在 rsync client 上通过 lsyncd 监控并推送数据给 rsync server 的 rsync daemon,rsync server接收 lsyncd 推送过来的数据,并写入本地磁盘,安装完成数据同步。

  4. lsyncd 适合于目录(文件)内容非实时变化的数据同步,对于实时变化的数据同步可以考虑 DRBD 等。

环境要求:client安装lsyncd,server配置/etc/rsyncd.conf,启用rsync服务 

安装lsyncd,需要有gcc、lua-devel

安装完成后,先测试和服务器能否正常同步
$ rsync -av /backup/ rsync://10.10.10.2/share

错误解决:

rsync: failed to set times on "/." (in share): Operation not permitted (1)
   根据提示应该是服务器目录权限有问题
   chown nobody /tmp/test            //修改目录权限
C_0013.gif在客户机上编辑 lsyncd 的同步配置文件
$ cp /usr/local/share/doc/lsyncd/lrsync.lua /usr/local/etc/
//复制样例文件,修改文件如下所示
settings = {
statusFile = "/tmp/lsyncd.stat",
nodaemon = true,         //在前台运行 lsyncd,方便测试排错,测试完成后可以去掉,lsyncd 在后台运行
statusInterval = 1,           //指定最短的更新时间间隔
}
sync{
default.rsync,
source="/backup/",                  //本地同步的目录
target="rsync://10.10.10.2/share/",            //服务器上同步的目录
rsyncOpts={"-av","--delete"},              //rsync 命令的选项
}
//如果 rsync 服务需要身份验证,可以修改为如下语句
sync{
default.rsync,
source="/backup/",
target="rsync://admin@10.10.10.2/share/",
rsyncOpts={"-av","--delete",”--password-file=/etc/rsync.pass”},
//注意 rsync.pass 文件中只存放了用户的密码,文件权限也必须是 600
$ lsyncd /usr/local/etc/lrsync.lua
注意这个程序不要中断,另外打开一个终端进行后续测试

开始测试看看 lsyncd 能否实时监控本地的/backup 目录,发现更新马上同步到服务器上。



本文出自 “爱武装一辈子” 博客,请务必保留此出处http://menglinux.blog.51cto.com/8733806/1528440

备份方式