## 20.5 鳥哥的備份策略
每部主機的任務都不相同,重要的數據也不相同,重要性也不一樣,因此,每個人的備份思考角度都不一樣! 有些備份策略是非常有趣的,包括使用多個磁帶機與磁帶來自動備份企業數據哩 [[3]](#ps3) 。
就鳥哥的想法來說,鳥哥并沒有想要將整個系統完整的備份下來,因為太耗時間了!而且就鳥哥的立場而言,似乎也沒有這個必要, 所以通常鳥哥只備份較為重要的文件而已!不過,由于鳥哥需要備份 /home 與網頁數據,如果天天都備份,我想,系統遲早會受不了 (因為這兩個部分就已經占去數 10 GB 的硬盤空間...),所以鳥哥就將我的備份分為兩大部分,一個是每日備份經常性變動的重要數據, 一個則是每周備份就不常變動的信息。這個時候我就寫了兩個簡單的 scripts ,分別來儲存這些數據。
所以針對鳥哥的“鳥站”來說,我的備份策略是這樣的:
1. 主機硬件:使用一個獨立的 filesystem 來儲存備份數據,此 filesystem 掛載到 /backup 當中;
2. 每日進行:目前僅備份 MySQL 數據庫;
3. 每周進行:包括 /home, /var, /etc, /boot, /usr/local 等目錄與特殊服務的目錄;
4. 自動處理:這方面利用 /etc/crontab 來自動提供備份的進行;
5. 異地備援:每月定期的將數據分別 (a)燒錄到光盤上面 (b)使用網絡傳輸到另一部機器上面。
那就來看看鳥哥是怎么備份的吧! ^_^
### 20.5.1 每周系統備份的 script
下面提供鳥哥的備份的 scripts ,希望對大家有點幫助!鳥哥假設你已經知道如何掛載一個新的 filesystem 到 /backup 去,所以格式化與掛載這里就不再強調啰。
```
[root@study ~]# vi /backup/backupwk.sh
#!/bin/bash
# ====================================================================
# 使用者參數輸入位置:
# basedir=你用來儲存此腳本所預計備份的數據之目錄(請獨立文件系統)
basedir=/backup/weekly <==您只要改這里就好了!
# ====================================================================
# 下面請不要修改了!用默認值即可!
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
export LANG=C
# 設置要備份的服務的配置文件,以及備份的目錄
named=$basedir/named
postfixd=$basedir/postfix
vsftpd=$basedir/vsftp
sshd=$basedir/ssh
sambad=$basedir/samba
wwwd=$basedir/www
others=$basedir/others
userinfod=$basedir/userinfo
# 判斷目錄是否存在,若不存在則予以創建。
for dirs in $named $postfixd $vsftpd $sshd $sambad $wwwd $others $userinfod
do
[ ! -d "$dirs" ] && mkdir -p $dirs
done
# 1\. 將系統主要的服務之配置文件分別備份下來,同時也備份 /etc 全部。
cp -a /var/named/chroot/{etc,var} $named
cp -a /etc/postfix /etc/dovecot.conf $postfixd
cp -a /etc/vsftpd/* $vsftpd
cp -a /etc/ssh/* $sshd
cp -a /etc/samba/* $sambad
cp -a /etc/{my.cnf,php.ini,httpd} $wwwd
cd /var/lib
tar -jpc -f $wwwd/mysql.tar.bz2 mysql
cd /var/www
tar -jpc -f $wwwd/html.tar.bz2 html cgi-bin
cd /
tar -jpc -f $others/etc.tar.bz2 etc
cd /usr/
tar -jpc -f $others/local.tar.bz2 local
# 2\. 關于使用者參數方面
cp -a /etc/{passwd,shadow,group} $userinfod
cd /var/spool
tar -jpc -f $userinfod/mail.tar.bz2 mail
cd /
tar -jpc -f $userinfod/home.tar.bz2 home
cd /var/spool
tar -jpc -f $userinfod/cron.tar.bz2 cron at
[root@study ~]# chmod 700 /backup/backupwk.sh
[root@study ~]# /backup/backupwk.sh <==記得自己試跑看看!
```
上面的 script 主要均使用 CentOS 7.x (理論上, Red Hat 系列的 Linux 都適用) 默認的服務與目錄, 如果你有設置某些服務的數據在不同的目錄時,那么上面的 script 是還需要修改的!不要只是拿來用而已喔! 上面 script 可以在下面的鏈接取得。
* [http://linux.vbird.org/linux_basic/0580backup/backupwk-0.1.sh](http://linux.vbird.org/linux_basic/0580backup/backupwk-0.1.sh)
### 20.5.2 每日備份數據的 script
再來,繼續提供一下每日備份數據的腳本程序!請注意,鳥哥這里僅有提供 Mariadb 的數據庫備份目錄, 與 WWW 的類似留言版程序使用的 CGI 程序與寫入的數據而已。 如果你還有其他的數據需要每日備份,請自行照樣造句啰! ^_^
```
[root@study ~]# vi /backup/backupday.sh
#!/bin/bash
# =========================================================
# 請輸入,你想讓備份數據放置到那個獨立的目錄去
basedir=/backup/daily/ <==你只要改這里就可以了!
# =========================================================
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
export LANG=C
basefile1=$basedir/mysql.$(date +%Y-%m-%d).tar.bz2
basefile2=$basedir/cgi-bin.$(date +%Y-%m-%d).tar.bz2
[ ! -d "$basedir" ] && mkdir $basedir
# 1\. MysQL (數據庫目錄在 /var/lib/mysql)
cd /var/lib
tar -jpc -f $basefile1 mysql
# 2\. WWW 的 CGI 程序 (如果有使用 CGI 程序的話)
cd /var/www
tar -jpc -f $basefile2 cgi-bin
[root@study ~]# chmod 700 /backup/backupday.sh
[root@study ~]# /backup/backupday.sh <==記得自己試跑看看!
```
上面的腳本可以在下面的鏈接取得。這樣一來每天的 Mariadb 數據庫就可以自動的被記錄在 /backup/daily/ 目錄里頭啦!而且還是文件名稱會自動改變的呦!呵呵!我很喜歡!OK!再來就是開始讓系統自己跑啦! 怎么跑?就是 /etc/crontab 呀!提供一下我的相關設置呦!
* [http://linux.vbird.org/linux_basic/0580backup/backupday.sh](http://linux.vbird.org/linux_basic/0580backup/backupday.sh)
```
[root@study ~]# vi /etc/crontab
# 加入這兩行即可 (請注意你的文件目錄!不要照抄呦!)
30 3 * * 0 root /backup/backupwk.sh
30 2 * * * root /backup/backupday.sh
```
這樣系統就會自動的在每天的 2:30 進行 Mariadb 的備份,而在每個星期日的 3:30 進行重要文件的備份!呵呵!你說,是不是很容易呢!但是請千萬記得呦!還要將 /backup/ 當中的數據 copy 出來才行耶!否則整部系統死掉的時候...那可不是鬧著玩的! 所以鳥哥大約一個月到兩個月之間,會將 /backup 目錄內的數據使用 DVD 復制一下,然后將 DVD 放置在家中保存!這個 DVD 很重要的喔!不可以遺失,否則系統的重要數據 (尤其是帳號信息) 流出去可不是鬧著玩的!

**Tips** 有些時候,你在進行備份時,被備份的文件可能同時間被其他的網絡服務所修改喔! 舉例來說,當你備份 Mariadb 數據庫時,剛好有人利用你的數據庫發表文章,此時, 可能會發生一些錯誤的訊息。要避免這類的問題時,可以在備份前,將該服務先關掉, 備份完成后,再啟動該服務即可!感謝討論區 duncanlo 提供這個方法!
### 20.5.3 遠端備援的 script
如果你有控管兩部以上的 Linux 主機時,那么互相將對方的重要數據保存一份在自己的系統中也是個不錯的想法! 那怎么保存啊?使用 USB 復制來去嗎?當然不是啦!你可以通過網絡來處置啦!我們假設你已經有一部主機, 這部主機的 IP 是 192.168.1.100 ,而且這部主機已經提供了 sshd 這個網絡服務了,接下來你可以這樣作:
* 使用 rsync 上傳備份數據
要使用 rsync 你必須要在你的服務器上面取得某個帳號使用權后, 并讓該帳號可以不用密碼即可登陸才行!這部分得要先參考服務器篇的遠端連線服務器才行! 假設你已經設置好 dmtsai 這個帳號可以不用密碼即可登陸遠端服務器,而同樣的你要讓 /backup/weekly/ 整個備份到 /home/backup/weekly 下面時,可以簡單這樣做:
```
[root@study ~]# vi /backup/rsync.sh
#!/bin/bash
remotedir=/home/backup/
basedir=/backup/weekly
host=127.0.0.1
id=dmtsai
# 下面為程序階段!不需要修改喔!
rsync -av -e ssh $basedir ${id}@${host}:${remotedir}
```
由于 rsync 可以通過 ssh 來進行鏡像備份,所以沒有變更的文件將不需要上傳的!相當的好用呢! 好了!大家趕緊寫一個適合自己的備份 script 來進行備份的行為吧!重要重要喔!

**Tips** 因為 rsync 搭配 sshd 真的很好用!加上它本身就有加密~近期以來大家對于數據在網絡上面跑都非常的在乎安全性, 所以鳥哥就取消了 FTP 的傳輸方式啰~
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀