2012年2月2日 星期四

Tar 指令詳解

備份程式:tar Function Options tarFiles [SomeFile?] SourceFiles?
將許多檔案包裝成一個檔案,並保留檔案權限、目錄結構、完整的符號連結和實體連結等相關訊息。
而在解開檔案時,會將原本時的目錄解開在目前的目錄底下。若要只解開部份檔案時,必須要加上在備份檔中該檔案的完整路徑。
一般的做法是:先將許多檔案用 tar 打包成一個檔案,再用 gzip 壓縮成FileName?.tar.gz。
如果將 tar Files 以 - 代替,表示輸出入至標準輸出入。如:
tar cvf -SourceFiles?| gzip -9 > tarFile.tar.gz
gunzip -9ctarFile.tar.gz| tar xvf -
Function:
c : 建立新的備份檔。
x : 將備份檔解開。
t : 列出備份檔的內容。
-T Sample : 備份在 Sample 中所列出的檔案清單。
r : 將檔案附加在這個備份檔案的後面。
u : 將備份檔內的檔案以更新的檔案取代。
d : 比較備份檔中的檔案和檔案系統中的檔案。
Options:
v : 列出處理檔案時的相關訊息。越多訊息越詳細。
k : 解開檔案時不要覆蓋已存在的檔案。
f FileName? : 指定備份檔的檔案名稱。
z : 和 gunzip 搭配使用,自動產生或解開壓縮後的備份檔。
j : 和 bzip2 搭配使用,自動產生或解開壓縮後的備份檔。
複製完整子目錄到另一個目錄中:
cd SourceDirectiory?
tar cf - . | (cd TargetDirectory?; tar xvf -)
備份一個子目錄:tar cvfBackup.tar /Direcory
分片備份:tar cvfMBackup.tar /Direcory

=====================================================================


1 tar

tar (tape archive) 原本是設計用來將文件打包到磁帶中的,我們也可以將檔案或是目錄打包成一個單一的檔案,必要時再用同一個程式來將資料全部還原或是只解開部份的資料,正因為它可以備份檔案或目錄,深受大家的愛用。
常用參數:
  • 指定動作 :
    • -c create,新增一個備份檔
    • -t list,顯示備份檔中的檔案清單
    • -x extract,解開備份檔中的檔案
  • 指定檔案:
    • -f file,讀/寫指定的檔案

       
  • 壓縮方式:
    • -z gzip,備份的東西要用 gzip 壓縮/解壓縮
    • -y bzip,備份的東西要用 bzip 壓縮/解壓縮,也可以用 -j
  • 其它:
    • -p permissions,保留原來的權限
    • -v verbose,備份的內容要顯示在畫面
    • -C (大寫 C),cd 先切換目錄
由於 tar 的功能非常的多,指令可用的選項令人眼花瞭亂,下面只示範最常用的,有興趣再自己用 man tar 好好的研究囉!

1-1 以 tar 打包要備份的資料

如果沒有什麼特殊需求,利用 tar 備份檔案只要用到 -c (新增) ,-p (保留權限設定),-f (指定檔名),頂多再加個 -v 看一下打包的過程。
例如:
tar -cpvf /home/backup/etc.tar /etc
上例將 /etc 目錄中所有的檔案打包到 /home/backup/etc.tar 中。
也可以同時備份多個目錄,將要打包的清單(以空白分隔)接在最後面即可。下面的例子將 /etc , /usr/local/etc 打包在 etc.tar 中:
tar -cpvf /home/backup/etc.tar /etc /usr/local/etc
我們也可以使用:
tar -czpvf /home/backup/etc.tgz /etc
和前面的例子比較,多了個參數 z ,也就是將 tar 打包完的檔案再利用 gzip 壓縮,所以新產生有經過壓縮處理的備份檔我們也將檔名命名為 etc.tgz (.tgz 結尾),也有人用 .tar.gz ,端看個人習慣。
咦~好奇的人可能會想到 FreeBSD 的 packages 檔名好像叫 *.tgz 或 *.tbz,和 tar , gzip , bzip 有沒有關啊?有興趣可以找個 FreeBSD 的 package ,用 tar 來打開包裝看看哦!!
另外,比較一下這兩個同樣是備份 /usr/local/etc 的指令有何不同?
tar -czvf /home/backup/local.etc.1.tgz /usr/local/etc
tar -czvf /home/backup/local.etc.2.tgz -C /usr/local etc
由於 tar 預設在備份時會儲存檔案的路徑 (但是自動去掉開頭的第一個斜線) ,也就是 /usr/local/etc/rc.d 在 local.etc.1.tgz 中會變成 usr/local/etc/rc.d,如果我們連 usr/local 都不想要,打包時可以利用 -C (大寫字母) 這個參數來控制路徑的保留層次,像前面第二個例子加了 -C /usr/local ,tar 會先切換至 /usr/local 目錄才備份 etc,所以在 local.etc.2.tgz 中 /usr/local/etc/rc.d 變成 etc/rc.d 儲存起來。

1-2 查看 tar 打包的檔案

要查看以 tar 打包的檔案只要利用 -t 這個動作參數即可。
例如:
tar -tvf /home/backup/etc.tar
上例會將 /home/backup/etc.tar 中的檔案清單顯示出來。
如果備份時有用 gzip 壓縮過則可以加上 -z
tar -tzvf /home/backup/etc.tgz
如果備份時用 bzip 壓縮過則加上 -y 或是 -j
tar -tyvf /home/backup/etc.tbz

1-3 解開 tar 打包的檔案

要解開 tar 封裝的檔案是利用 -x 這個動作參數,再搭配 -z , -y (-j) 解壓縮。如果想保留原來的權限設定則要記得使用 -p,至於要不要使用 -C (大寫字母) 則要看當初在打包時有沒有使用及自己想要放置的路徑而定,最容易犯的毛病大多是解錯路徑,所以在使用 -x 解開時一定要記得先用 -t 查看一下當初是怎麼打包的,最保險的方法是先解到一個暫存的地方,再將需要的檔案複製/搬移到目的地。
將 /home/backup/etc.tgz 中的東西在目前所在的目錄解開:
tar -xzvf /home/backup/etc.tgz
將 /home/backup/etc.tgz 中的東西在 /home 中解開:
tar -xzvf /home/backup/etc.tgz -C /home
將 /home/backup/etc.tgz 中的東西在 /home 中解開,並保留原始的權限:
tar -xzpvf /home/backup/etc.tgz -C /home

1-4 只解開 tar 打包的部份檔案

只解出 /home/backup/etc.tgz 中的 etc/group , etc/master.passwd 兩個檔案:
tar -xzvf /home/backup/etc.tgz etc/group etc/master.passwd
將 /home/backup/etc.tgz 中凡是叫 etc/rc* 通通解開,其它的不要:
tar -xzvf /home/backup/etc.tgz 'etc/rc*'
將 /home/backup/etc.tgz 中的檔案解開,但是 rc.d 目錄中的東西不要:
tar -xzvf /home/backup/etc.tgz --exclude='rc.d/*'
以上提到的方法也可以應用在打包時 (-c) 及查看清單時 (-t) 。

1-5 利用 tar 直接複製整個目錄到另一個目錄中

利用 tar 和 pipe 的技巧,可以做整個目錄直接複製,不過這個方法並不保證完整哦,畢竟它的方式不若 dump + restore 完備。
假設我想把 /usr 中所有的東西複製到 /mnt/usr 中,就執行底下的指令:
tar cf - /usr | (cd /mnt ; tar xvfBp -)


2 dump 及 restore

前面提過的 tar 可以針對目錄或檔案來備份,而 dump 則是以 block 為處理單位,針對整個檔案系統(分割區)來備份,可以更完整的保持系統的原貌不會有所缺漏,以 dump 備份的資料可以用 restore 再還原回來。

2-1 以 dump 將整個 partition 備份至一個檔案

使用過 Norton ghost 的人應該知道裡面有個選項是將 MS Windows 或 Linux 系統的某個分割備份到映像檔中,下面則是利用 dump 做類似的動作,將某個分割區備份至一個檔案。
假設 /home 是一個單獨的分割區 (/dev/ad0s1h),而 /backup 是一個空間夠大的目錄,我們可以執行:
# dump -0uaf /backup/home.dump /home
上面的例子以 level 0 將 /home 所在的分割區備份至 /backup/home.dump 中。
參數說明:
  • -0 以 level 0 備份,也就是完整備份,level 可以為 0~9,level 1 則只備份 level 0 後有異動的部份。
  • -u update,備份完成後自動更新 /etc/dumpdates 的內容(記錄分割區代號、level、備份日期)。
  • -a auto-size,略過可儲存空間大小的檢查。
  • -f file,將備份的資料輸出到後面參數指定的檔案,也可以是一個硬體(device file)或是標準輸出 (-)。

2-2 以 restore 還原檔案

以 dump 備份的分割區我們可以用 restore 將檔案還原出來,就像利用 ghost 把映像檔再寫入 partition 一樣,不過 restore 也可以只解出部份檔案。不過在使用 restore 要注意的是,restore 並不會幫我們將 partition 做格式式,而且,它是將內容解在目前所在的目錄,所以要記得先做好格式化並切換到要還原的目錄。
例如想把 /home dump 完的備份 ( /backup/home.dump ) 還原到 /mnt/new (/dev/ad1s1e) 這個 partition 中,如果 /dev/ad1s1e 已經格式化好,而且已經 mount 到 /mnt/new ,就可以執行以下指令:
# cd /mnt/new
# restore -rf /backup/home.dump
完成後,/mnt/new 就可以看到原來 /home 的中的資料。
如果只想還原備份中的部份檔案怎麼辦呢?
restore 提供 -i 的參數來進行交談式的還原,我們可以利用這個方法來指定要還原的部份,例如,只想由 /home 的備份檔 home.dump 中還原 /home/gsyan , /home/students 的資料,我們可以執行:
# restore -if /backup/home.dump
出現 restore > 的提示符號後,我們就可以下指令,例如:輸入問號 (?) 即可列出可用的指令
restore > ?
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
setmodes - set modes of requested directories
quit - immediately exit program
what - list dump header information
verbose - toggle verbose flag (useful with ``ls'')
help or `?' - print this list
If no `arg' is supplied, the current directory is used

 
為了達到範例的目標,我們要用 add 來新增要還原的檔案清單,用 extract 執行還原,下面是還原出 /home/gsyan 及 /home/studens 至目前分割區的步驟,黑體字的部份是自行輸入的部份:
restore > add gsyan students
restore > extract
You have not read any tapes yet.
If you are extracting just a few files, start with the last volume
and work towards the first; restore can quickly skip tapes that
have no further files to extract. Otherwise, begin with volume 1.
Specify next volume #: 1
set owner/mode for '.'? [yn] y
restore >
 
要結束只要輸入 quit 按 Enter 鍵即可跳出 restore 。

2-3 以 dump 及 restore 做 partition 對 partition 的對拷

將分割區 dump 給標準輸出,再讓 restore 由標準輸入還原在新的 partition 就能達到 partition 對 partition 對拷的目的,底下是進行對拷的流程:
    1. 切好新的 partition
    2. 以 newfs 將 partition format 好
    3. 將新的 partition mount 好
    4. 切換至新的 partition 中
    5. 以 dump & restore 進行備份及還原
※ 1-2 的步驟可以執行 /stand/sysinstall ,然後選取 Configure 利用裡面的 Fdisk 和 Label 進行分割及格式化
例如:想要將 /home (/dev/ad0s1h) 上的所有資料備份到新硬碟上的 partition (/dev/ad2s1h),執行
# newfs /dev/ad2s1h (如果已經格式化過則可省略)
# mount /dev/ad2s1h /mnt (如果已經 mount 好則可省略)
# cd /mnt
# dump -0uaf - /home | restore -rf -
# cd /
# umount /mnt
特別注意 dump 及 restore 並沒有指定檔名,而都用了一個減號 ( - ),對 dump 來說,是將 partition 的資料一個 block 一個 block 的送向標準輸出,而 restore 則是由標準輸入讀入並還原。

2-4 以 dump & restore 備份整顆硬碟

如果想將整顆硬碟的資料拷至另一顆新硬碟,以最笨的方法就是先用 /stand/sysinstall 將新硬碟切割好,再利用 dump & restore 把各 partitions 一一對拷即可,程序如下:
  1. 將新硬碟接好後,以重新開機。

     
  2. 執行 /stand/sysintall
    • 選取 Configure
    • 選取 Fdisk 切給 FreeBSD 用的 partions
    • 選取 Label 進入 Disklabel Editor
    • 注意:在設定 disklabel 時 mount point 要先照原來的架構設定
    • 在存檔前先移到各 partition 後按 M 修改 mount point 至 /mnt 下的暫存目錄,不然可能會有錯誤
    • 按 W 存檔並開始 format New H.D. (newfs)

       
  3. 離開 sysinstall

     
  4. umount -A 解除所有 mount 上來的 filesystem

     
  5. mount -a 重新掛上系統預設的 filesystem

     
  6. 開始備份各 partition

     
  7. 將新硬碟的 / (例如:/dev/da1s1a) 掛上來

    mount /dev/da1s1a /mnt
  8. 將新硬碟 /etc/fstab 中的 /dev/xxx 改成合適的

    ee /mnt/etc/fstab

2-5 dump + ssh 進行異地備份

dump 和 restore 其實有相對應的 rdump 和 rrestore 可進行遠端的備份及還原,不過 r 系統的指令的安全性較需考量,我們可以利用 ssh 來進行較安全的連線。
假設現在想把名為 mail 上掛在 /home 的這個 partition 異地備份至名為 bkserver 主機上的 /backup 目錄 ,我們可以進行以下程序來備份。
  • 準備工作
    • 在 bkserver 上準備一個備份登入用的專用帳號,假設就叫 bk 好了!!
    • 檢查 bkserver 備份專用的目錄 /backup 是否可被備份專用帳號 ( bk ) 寫入。
    • 在 mail 上因為要執行 dump 必須是 root ,所以屆時必須由 root 執行 ssh 遠端登入 bkserver,所以要為 mail 上 root 以 ssh-keygen 準備登入用的 "公開金鑰" 。
    • 將 root@mail 的公開金鑰置入 bkserver 上帳號 (bk) HOME 的 .ssh/authorized_keys 中。
  • 進行備份
準備工作中比較麻煩的部份應該遠端登入用的金鑰,製作流程如下:

2-5-1 連線測試

我們先在 mail 上以 root 的身份登入 mail,然後遠端登入 bkserver (假設在 bkserver 上已經建好 bk 這個帳號)
# ssh bk@bkserver
如果是第一次連線,應該會出現下面的問題詢問是否儲存遠端主機的識別資料,類似下面:
The authenticity of host 'bkserver.test.edu.tw (192.168.1.5)' can't be established.
DSA key fingerprint is 2b:cc:89:80:bc:77:45:83:47:ae:b6:29:51:f5:15:33.
Are you sure you want to continue connecting (yes/no)?
輸入 yes 即可,ssh 會將資料存入 ~/.ssh/know_hosts ,下次就不會有同樣的問題。
接著輸入 bk 的登入密碼,如果成功登入就完成連線測試,輸入 exit 登出,準備進行登入用金鑰的製作。

2-5-2 製作金鑰

我們希望在進行遠端備份能夠不用輸入密碼自動登入遠端主機執行備份儲存的工作,所以要先在 mail 上用 ssh-keygen 來產生 ssh 登入用的金鑰對。
先確認已經在本機 ( mail ) 上用執行 dump 指令的 root 帳號登入哦!然後由 root 執行:
ssh-keygen -d
接著應該會出現以下的對話:
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
a6:62:05:95:92:79:2a:71:2d:73:3b:7d:0e:e7:39:26 root@mail.test.edu.tw
如果希望登入時不用輸入密碼直接登入,只要通通按 Enter 回所有問題即可。
執行完會在 /root/.ssh 中產生 id_dsa 和 id_dsa.pub ,後面那個就是我們要放在 bkserver 裡 bk 帳號下的金鑰。
接著我們要把 /root/.ssh/id_dsa.pub 複製到遠端主機 (bkserver) 裡備份專用帳號 (bk) 個人目錄的.ssh/authorized_keys 中。
如果 bkserver 的 ~bk/.ssh/authorized_keys 不存在,我們直接把前面在 mail 上 root 帳號產生的 id_dsa.pub 上傳過去即可,在 mail 上以 root 執行:
scp ~/.ssh/id_dsa.pub bk@bkserver:.ssh/authorized_keys
不過要記得先幫 bk 建好 .ssh 的目錄哦!不然會發生錯誤。
如果 authorized_keys 早已存在,我們可以先將 id_dsa.pub 傳到 bkserver 上,然後再將 id_dsa.pub 中的內容貼到 ~bk/.ssh/authorized_keys 新的一行。
如果前面的步驟完成了,我們在 mail 以 root 執行 ssh bk@bkserver 應該就可以不用輸入密碼遠端登入囉!

2-5-3 遠端備份

做好前面的準備工作後,我們就可以在 mail 上將某個 partition 備份到位於遠端的 bkserver 上了。
例如:
# dump -0uaf - /home | ssh -c blowfish bk@bkserver dd of=/backup/mail.home.dump
上面的例子在 mail 上執行,將掛在 mail /home 的 partition 備份起來,並以 bk 帳號遠端登入 bkserver 儲存在 bkserver 的 /backup/mail.home.dump 裡。
如果想省一些空間則可以順便用 gzip 壓縮後再傳給 bkserver,指令改為:
# dump -0uaf - /home | gzip -2 | ssh -c blowfish bk@bkserver \
dd of=/backup/mail.home.dump

2012年2月1日 星期三

CentOS 5 MySQL 設定檔 - my.cnf 的位置

在CentOS以yum安裝MySQL後,
設定檔範例會放在:
1. CentOS 5.x: /usr/share/mysql
2. CentOS 4.x: /usr/share/doc/mysql-server-4.1.27 (最後一層目錄名稱依MySQL版本會有所不同)
會有根據主機記憶體大小不同有各個合適的範本可以使用:
my-huge.cnf
my-innodb-heavy-4G.cnf
my-large.cnf
my-medium.cnf
my-small.cnf

自動封鎖暴力入侵:Fail2ban


這陣子觀察系統紀錄,發現每天都有不同的IP一直不斷的測試FTP的帳號及密碼,為了安全起見在網路上找到這篇介紹文章。
安裝說明如下 (我用的系統是CertOS 5.x)
Fail2ban  用途在於偵測錯誤登入而對其IP進行封鎖
1. 安裝需求套件python(這裡使用redhat的YUM 線上安裝套件管理程式)
yum install python python-devel gamin-python
2.安裝fail2ban
這邊我使用 RPM 安裝
b.安裝指令
rpm -ivh fail2ban-0.8.1-1.el5.rf.noarch.rpm
我主要是針對Proftpd防護,SSH我是設定防火牆所IP的。
修改fail2ban的設定檔
# vim /etc/fail2ban/jail.conf
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
# 不列入的 IP 範圍,如果有二組以上以空白做為間隔 192.168.250.0/24ignoreip = 127.0.0.1
# "bantime" is the number of seconds that a host is banned.
# 設定 IP 被封鎖的時間(秒),如果值為 -1,代表永遠封鎖
bantime  = 600    (這邊是預設值)
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
# 設定在多少時間內達到 maxretry 的次數就封鎖
findtime  = 600
# "maxretry" is the number of failures before a host get banned.
# 允許嘗試的次數
maxretry = 3
[ssh-iptables]
enabled  = true
filter      = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
                 mail-whois[name=SSH, dest=root]
logpath  = /var/log/secure
# 如果有個別的次數設定就設在這裡
maxretry = 5
針對Proftpd防護 (我的系統是用Proftpd ,CentOS 預設是 vsftpd)
[Proftpd-iptables]
enabled  = true
filter   = Proftpd
action   = iptables[name=PROFTPD, port=ftp, protocol=tcp]
                   sendmail-whois[name=PROFTPD, dest=root]
logpath  = /var/log/message (這邊請修改為你的Proftp的記錄檔)
maxretry = 3           (錯誤次數)
bantime  = 1800    (鎖定時間)
修改後請存檔離開
啟動服務: service  fail2ban start
查看防火牆設定,使用 iptables -L -nv   會看到以下兩條紀錄
Chain fail2ban-SSH (1 references)
target     prot opt source               destination
RETURN     0    --  anywhere             anywhere
Chain fail2ban-ProFTPD (1 references)
 pkts bytes target          prot opt in     out     source               destination
  117  5756 RETURN     all  --         *      *       0.0.0.0/0            0.0.0.0/0
最後設定開機啟動fail2ban 指令:
# chkconfig fail2ban on
                              http://blog.pmail.idv.tw/index.php?id=318&load=read
補充內容
今天上班發現流量異常,並且主機顯的很忙碌,,查詢紀錄發現郵件伺服器一直有個IP不斷的測試轉信,網路上找到解決方式,用之前就安裝fail2ban
所以就把以下功能補上!!
Using Fail2ban with Dovecot
新增郵件過濾的檔案 Create the filter file /etc/fail2ban/filter.d/dovecot-pop3imap.conf
[Definition]
failregex = (?: pop3-login|imap-login): (?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed).*rip=(?P\S*),.*
ignoreregex =
將以下規則加到 /etc/fail2ban/jail.conf 設定檔中
Add the following to /etc/fail2ban/jail.conf
[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,imap", protocol=tcp]
logpath = /var/log/maillog
maxretry = 20
findtime = 1200
bantime = 1200
記得重新啟動 fail2ban   指令為 service fail2ban restart

2012年1月31日 星期二

Centos上安裝phpmyadmin


1. 參照鳥哥, 打入以下命令
[root@linux ~]# yum install httpd mysql-server php php-devel php-mysql

2.由於yum安裝的php版本關係(5.1.6), phpmyadmin首頁下載 phpMyAdmin-2.11.9.6-all-languages-utf-8-only.tar

3.解壓縮後, 放至 /var/www/html 並建議更名為phpmyadmin

4. phpmyadmin目錄下, 下這行指令
   cp config.sample.inc.php config.inc.php

5. 編輯config.inc.php, 並存檔
   /* Authentication type */
   $cfg['Servers'][$i]['auth_type'] = 'http';

6. 確定是否 關閉SELinux:
   修改/etc/selinux/config文件中的SELINUX="" disabled
   ...
   SELINUX=disabled
   ...
   然後重新開機

7. 記得更改目錄權限
   chmod -R 755  /var/www/html/phpmyadmin 記得別用777!!!

8.打開phpmyadmin之後, 如果看到以下訊息:
  找不到 PHP 內的 mbstring 編碼模組, 沒有這個模組, phpMyAdmin 無法準確地分割雙字元文字, 而可能產生問題.
  請在安裝 php-mbstring , :
  yum install php-mbstring  就可以了

2012年1月30日 星期一

php與mysql降級過程

php與mysql降級過程:

 
1.移除php-->yum remove php

2.移除mysql-->yum remove mysql

3.移除被remi更新的相關套件-->yum remove *remi

4.檢查有無之前更新的remi安裝的套件(rpm -qa|grep remi),若有記得利用(yum remove *remi)移除,或是用(rpm -e)手動移除。

5.移除epel與remi:
yum remove epel-release-5-3  -->  會將相關套件 remi-release-5-7 一起移除。

6.利用yum install 裝回php與mysql
yum install php
yum install mysql

7.檢查設定檔與相關的套件

8.重新啟動Apache與mysql

2012年1月29日 星期日

備份 mysql 和 drupal

基本上我們只要備份 /var/www/html 和 /var/lib/mysql 目錄即可.方法有兩種
1.利用 Linux 的 bash script 加上 cron 來自動備份.
2.利用 backup module 手動來備份
1.利用 Linux 的 bash script 加上 cron 來自動備份.
Backup
備份 web
[root@benjr ~]# mkdir -p /backup/`date +%F`
[root@benjr ~]# cd /backup/`date +%F`
[root@benjr 2007-12-26]# tar zcvf drupal.tar.gz /var/www/html
接下來備份資料庫
[root@benjr 2007-12-26]# mysqldump -u root -p database.name > mysql.sqlEnter password:
#其中的 database 請依你實際的 database 名稱,我的 database 名稱為 drupal.
[root@benjr 2007-12-26]# tar zcvf mysql.tar.gz mysql.sql
[root@benjr 2007-12-26]# rm mysql.sql
你還可以透過 bash script 加上 cron 讓他每天執行一次
shell script-Full Backup 程式
[root@benjr ~]# vi /root/backup.sh
#! /bin/bash
mkdir -p /backup/`date +%F`
cd /backup/`date +%F`
tar zcvf drupal.tar.gz /var/www/html
mysqldump -u root -p[yourpassword] database > mysql.sql
tar zcvf mysql.sql.tar.gz mysql.sql
rm mysql.sql

#-p[yourpassword] -p 和 [yourpassword] 中間沒有空格.
記得權限要改成可執行,當然沒有人要自己手動備份這些東西,最好是系統能自己備份,所以可以用 crontab 來幫我們.
[root@benjr ~]# chmod a+x backup.sh
[root@benjr ~]# crontab -e
0 2 * * * /root/backup.sh
我們的備份策略為每天晚上兩點做一次 full backup
Restore
還原 web
[root@benjr /]# cd /
[root@benjr /]# cp /backup/`date %F`/* ./
[root@benjr /]# tar zxvf drupal.tar.gz
還原資料庫
[root@benjr html]# cd /backup/`date %F`/
[root@benjr 2007-12-26]# tar zxvf mysql.sql.tar.gz
[root@benjr 2007-12-26]# mysql -u root -p
Enter password:
mysql > create database drupal;
mysql> grant all privileges on drupal.* to drupaluser@localhost identified by 'your.password' ;
mysql > exit;
[root@benjr 2007-12-26]# mysql -u root -p drupal < mysql.sql
Enter password:
當然光是備份還不能滿足我們的需求,最好這些資料都能丟到遠端,以防止系統無法開機.這邊提供一個指令 mutt ,這是一個 mail 的指令,比起傳統的指令 mail 他還可以夾檔來傳送你的 mail.
[root@benjr backup]# mutt -s "benjr.tw `date +%F` backup" -a /backup/`date +%F`.tar.gz benjr.tw@gmail.com < /root/mail.txt
mutt 參數
-s:信件主旨
-a:夾附檔案
-b:密件副本
-c:副本
< /root/mail.txt mail 的內文,請自行產生並決定內容.
date 參數
%F: full date; 和指定 %Y-%m-%d 一樣.
%Y:顯示年份
%m:顯示月份
%d:顯示日期
bash 參數
` `:此符號為數字鍵 1 旁的 ~ 鍵,在` `中的指令優先執行,並將結果套用目前指令。
所以 backup.sh 就需要在修改一下了.
[root@benjr backup]# vi /root/backup.sh#! /bin/bash
mkdir -p /backup/`date +%F`
cd  /backup/`date +%F`
tar zcvf  drupal.tar.gz /var/www/html
mysqldump -u root -p123456 drupal > mysql.sql
tar zcvf mysql.sql.tar.gz mysql.sql
rm mysql.sql
cd /backup/
tar zcvf `date +%F`.tar.gz /backup/`date +%F`
mutt -s "benjr.tw `date +%F` backup" -a /backup/`date +%F`.tar.gz benjr.tw@gmail.com < /root/mail.txt
如果你還不滿意這 bash script 太陽春,Drupal 有提供 backup/restore 的 bash script 可共使用. http://drupal.org/node/59369
2.利用 backup module 手動來備份(這個模組在實際使用上有很多的問題,還是建議直接使用 bash script來做)
可以利用此模組在網站的根目錄(/var/www/html/files/backup) 建立backup的壓縮檔,包含 Drupal 的檔案和mysql的資料庫,並且可以透過瀏覽器下載整個的備份.
Backup module的網頁為http://drupal.org/project/backup
1.在他的官方網頁下載 "backup.module" ,放在目錄 /var/www/html/modules/ 下.
[root@benjr ~]# cp backup-5.x-3.0.tar.gz /var/www/html/modules
[root@benjr ~]# cd /var/www/html/modules
[root@benjr modules]#  tar -zxvf backup-5.x-3.0.tar.gz
2. 第一步就是在管理頁面的管理/網站建置/模組將 backup 啟動.
3. 在管理中的內容管理會多出一個 "backup" 選項.直接點選就可以開始做 backup 的動作.
NOTE: 目前這個模組只支援 MySQL 為資料庫系統.

【CentOS】lighttpd php mysql-LAMP 架設

【CentOS】lighttpd php mysql-LAMP 架設

來源:http://www.centerbbs.com/redirect.php?tid=25680&goto=lastpost


【前言】

[LAMP - Wikipedia] 應該不用多說了吧,不過本次實作 Web Server 不是使用 Apache,而是使用小而輕巧的 Lighttpd-輕量級 Web Server,不知是不是應該改叫 LLMP (Linux Lighttpd MySQL PHP) :p

【作業環境】

CentOS 5.1 (Linux 2.6.18-53.1.4.el5)

mysql-server-5.0.22-2.2.el5_1.1

lighttpd-1.4.18-1.el5.rf

php-5.1.6-15.el5

php-mysql-5.1.6-15.el5

【安裝及設定】

MySQL

Step1.安裝 MySQL Database

我使用郡組安裝把相關會用到的套件都裝入,在安裝以前先查看會安裝哪些套件
複製內容到剪貼板
代碼:
#yum groupinfo "MySQL Database"            //查尋 MySQL 郡組套件會安裝哪些套件
Group: MySQL Database
  Description: This package group contains packages useful for use with MySQL.
  Mandatory Packages:                       //強制安裝套件
    mysql
  Default Packages:                         //預?#93;會安裝的套件
    unixODBC
    mysql-server
    MySQL-python
    mysql-connector-odbc
    libdbi-dbd-mysql
    perl-DBD-MySQL
  Optional Packages:                        //建議安裝 (視個人需求自行安裝)
    mod_auth_mysql
    mysql-devel                             //MySQL ?#123;式?#125;發套件及函式庫
    qt-MySQL
    mysql-bench                             //MySQL 效能測試套件
    php-mysql
接下來就利用 yum 來進行郡組安裝 MySQL 吧
複製內容到剪貼板
代碼:
#yum groupinstall "MySQL Database"
你可能會問說怎麼沒有 MySQL-shared (MySQL 用戶端函式庫套件),這個套件若需要就到[MySQL Download]找對應的 MySQL 版本及需要的 rpm 來安裝吧。

Step2.修改 /etc/my.cnf

我想將 DB 放置資料夾從預設的 /var/lib/mysql 改放到 /home/db/mysql 下,我喜歡集中管理 :p
複製內容到剪貼板
代碼:
#mkdir /home/db ; mkdir /home/db/mysql
#chown mysql:mysql /home/db/mysql
#vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql                //預?#93;值
datadir=/home/db/mysql                //修改後
再來就是執行 chkconfig 將 mysqld 設定在 runlevel 2 ~ 5 為啟動 MySQL 服務
複製內容到剪貼板
代碼:
#chkconfig mysqld on
#chkconfig --list |grep mysqld        //查看?#93;定是否生效
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
Step3.啟動 MySQL
複製內容到剪貼板
代碼:
#/etc/rc.d/init.d/mysqld start        //啟動 MySQL 服務
Initializing MySQL database:  Installing all prepared tables Fill help tables
Starting MySQL:                                            [  OK  ]
檢查 MySQL 是否啟動成功並 Listen 相關 Port
複製內容到剪貼板
代碼:
#netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN
Step4.設定 MySQL 管理者密碼

剛安裝完 MySQL 後記得趕快設定管理者密碼 (這裡的 root 跟 CentOS 的 SuperUser Root 沒關系哦!!)
複製內容到剪貼板
代碼:
#mysqladmin -u root password YOUR_PASSWORD     //?#93;定新密碼
#mysqladmin -u root -p password NEW_PASSWORD   //日後若要更改密碼
Step5.測試登入 MySQL

設定好 MySQL 管理者密碼後試著登入看看吧:p
複製內容到剪貼板
代碼:
#mysql -u root -p
Enter password:                                //輸入剛才?#93;定的 MySQL 密碼
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1581 to server version: 5.0.27
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>                                         //成功登入 mysql
Step6.建立其它 MySQL 帳號

以下命令為表示允許連線主機來源是 localhost 以 sqluser1 的 MySQL 帳號及密碼為 1234 登入的使用者,能對指定的資料庫 testdb 擁有所有權限。
複製內容到剪貼板
代碼:
mysql> grant all privileges on testdb.* to sqluser1@localhost IDENTIFIED BY '1234';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES ;             //重新載入(使變更生效)
Query OK, 0 rows affected (0.01 sec)
Lighttpd

Step1.安裝 lighttpd、lighttpd-fastcgi 套件

因為 Lighttpd 使用 FastCGI 來處理 PHP 所以要一併安裝
複製內容到剪貼板
代碼:
#yum -y install lighttpd lighttpd-fastcgi
Step2.修改 lighttpd 設定檔

修改 lighttpd 設定檔來支援 PHP (FastCGI)
複製內容到剪貼板
代碼:
#vim /etc/lighttpd/lighttpd.conf
server.modules = (
                   "mod_fastcgi",   //這行的 mark 要拿掉(支援 PHP-FastCGI)
                  )
#### fastcgi module
## read fastcgi.txt for more info
## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini
fastcgi.server             = ( ".php" =>
                               ( "localhost" =>
                                 (
                                   "socket" => "/var/run/lighttpd/php-fastcgi.socket",     //預?#93;值
                                   "socket" => "/tmp/php-fastcgi.socket",                  //修改後
                                   "bin-path" => "/usr/bin/php-cgi"
                                 )
                               )
                              )
Step3.設定開機自動啟動 lighttpd 服務

使用 chkconfig 指令來查看 lighttpd 在各 runlevel 下狀態
複製內容到剪貼板
代碼:

#chkconfig --list |grep lighttpd
lighttpd        0:off   1:off   2:off   3:off   4:off   5:off   6:off  
設定 lighttpd 在 runlevel 為 2、3、5 時會啟動服務
複製內容到剪貼板
代碼:

#chkconfig --levels 235 lighttpd on      
檢查剛才的設定是否生效
複製內容到剪貼板
代碼:

#chkconfig --list |grep lighttpd
lighttpd        0:off   1:off   2:on    3:on    4:off   5:on    6:off  
Step4.啟動 lighttpd 服務
複製內容到剪貼板
代碼:

#/etc/rc.d/init.d/lighttpd start
Starting lighttpd:                                         [  OK  ]  
檢查一下 lighttpd process 是否執行
複製內容到剪貼板
代碼:
#ps ax |grep lighttpd
4266 ?        S      0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
檢查是否 LISTEN Port 80
複製內容到剪貼板
代碼:
#netstat -tnl |grep :80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN
PHP

Step1.安裝 PHP 5

安裝 php 及 php-mysql 套件
複製內容到剪貼板
代碼:
#yum -y install php php-mysql
Step2.查尋安裝 PHP 是否成功

查看安裝的 PHP 版本
複製內容到剪貼板
代碼:
#php -v
PHP 5.1.6 (cli) (built: Sep 20 2007 10:16:10)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
查看目前 PHP 模組
複製內容到剪貼板
代碼:
#php -m
[PHP Modules]
bz2
...略
xml
zlib
[Zend Modules]
Step3.測試 Lighttpd 能否正確處理 php 檔案

隨意建立一個檔名為 test.php 的檔案,然後放到 lighttpd 的 web 目錄而 test.php 內容如下如果能看到 php 的預設頁就表示 lighttpd 能正確處理 php 檔案了
複製內容到剪貼板
代碼:
phpinfo>  
【參考】

[學生用伺服器建置流程(CentOS 5 版)PHP & MySQL]

[台灣PHP聯盟 - 在 RHEL 修改 mysql 放置資料的路徑]

[Jamyy's Weblog: 架設自己的即時訊息伺服器 - 使用 jabberd 2]

【Log】