備份方式

完全備份:完整的備份業務數據,每次都對整個業務系統進行備份
優點:當數據丟失時,只要用一盤磁帶(災難發生前一天的本分磁帶)就可以恢復丟失的數據
缺點:備份數據大量重複,佔用大量的磁帶空間,增加成本。其次,備份數據量很大,備份所需的時間較長。
增量備份:以上次備份爲基準的備份方式,即只對每天新增的或修改過的數據進行備份。例如,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 [email protected]:/tmp/test/ /tmp/backup
    $ rsync -av --delete [email protected]:/tmp/test/ /tmp/backup
    $ rsync -av -e "ssh -p 5432" [email protected]:/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://[email protected]/share/ /tmp/backup //用 admin 用戶去同步

        6. rsync -av --password-file=/etc/rsyncd.pass rsync://[email protected]/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://[email protected]/share/",
rsyncOpts={"-av","--delete",”--password-file=/etc/rsync.pass”},
//注意 rsync.pass 文件中只存放了用戶的密碼,文件權限也必須是 600
$ lsyncd /usr/local/etc/lrsync.lua
注意這個程序不要中斷,另外打開一個終端進行後續測試

開始測試看看 lsyncd 能否實時監控本地的/backup 目錄,發現更新馬上同步到服務器上。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章