如何為西軟數(shù)據(jù)做增量備份及恢復(fù)
西軟在實(shí)施階段時,會設(shè)置好幾個linux shell的自動任務(wù),把數(shù)據(jù)每天全庫備份兩次,并且并把數(shù)據(jù)通過ftp拷至備份庫,其實(shí)這樣做存在非常大的安全隱患,數(shù)據(jù)庫服務(wù)器如果給ko了,您酒店只有當(dāng)天的兩次備份,數(shù)據(jù)損失將是12個小時來計(jì)算,對酒店經(jīng)營非常不利。如果通過sybase和中標(biāo)的高可用集群配置將帶來成本的高額上升,可能大部分酒店總經(jīng)理都不會批準(zhǔn)這個方案,前段時間做了一個方案,并在我們集團(tuán)的某酒店數(shù)據(jù)庫中實(shí)現(xiàn)了,過程非常簡單,就看各位edp有沒有心思去做。這樣的做的好處是可以幫您把數(shù)據(jù)損失量控制在一個小時之內(nèi)。
提醒各位edp,這個方案不太適合服務(wù)器性能較低的酒店,差異備份雖然數(shù)據(jù)量不大,但是還會稍微影響生產(chǎn)數(shù)據(jù)庫的io性能的。
方案總體概述:(這個辦法可以有效避免復(fù)雜的crontab重命名文件的操作,但是在寫腳本的時候有點(diǎn)累贅)
預(yù)備:準(zhǔn)備工作設(shè)置
1. 編寫簡單的linux shell文件,作用是調(diào)用sql腳本文件;
2. 編寫sql備份腳本文件;
3. 設(shè)置linux crontab任務(wù),讓差異備份自己每小時進(jìn)行;
4. 通過windows 批處理文件,從linux ftp中把數(shù)據(jù)定時拉出來;
5. 備份恢復(fù)。
預(yù)備:設(shè)置sybase數(shù)據(jù)sp_dboption參數(shù)。
1.進(jìn)入命令行界面
2.輸入:sybase 密碼:sybase
3.輸入:isql -usa 密碼為空按回車
4.輸入:sp_dboption foxhis,trunc,false //關(guān)閉truncation,保證增量備份可以在database online的情況下使用。
5.首先執(zhí)行全庫備份:
dump database foxhis to 'xx/xx/xx/full_full.dat' 6點(diǎn)一次
操作完以上工作后再進(jìn)行下面的操作
一、編寫簡單的linux shell文件,作用是調(diào)用sql腳本文件
首先需要用sybase用戶進(jìn)入linux系統(tǒng),在/home/sybase目錄下建立一個您的腳本文件夾
1
2
3
4
5
6
|
- bash -3.2$ mkdir hotelbackup // 新建腳本文件夾 - bash -3.2$ cd hotelbackup // 來到剛剛新建的腳本文件夾里 - bash -3.2$ vi 00.sh // 用 vi 新建一個空白的shell文件然后在 vi 的狀態(tài)下,按一下字母“a”啟動 vi 的編輯模式,然后輸入: #!/bin/sh /home/sybase/bin/ . /isql -usa -p -i /home/sybase/hotelbackup/00 .sql // 不要直接寫isql,一定要寫全路徑,避免isql啟動失敗! :wq // 輸入完成后,按下“esc”然后輸入“:wq”是保存退出。 |
這樣第一個shell腳本就編寫完成,具體意思就是說:啟動isql命令輸入用戶名和密碼,并在isql狀態(tài)下運(yùn)行00.sql這個腳本的sql語句。
二、編寫sql備份腳本文件;
1
2
|
dump tran foxhis to '/home/sybase/hotelbackupfile/00.log' go //把差異備份到以上目錄 |
1. 我們的備份策略是每12小時做一次全庫備份,每小時做一次差異備份。上面的語句是做差異備份,文件名“00”可以自定義,我這里的00就是0點(diǎn)的意思,各位酒店edp可以隨心所欲地命名。
2. 接下來我們設(shè)置全庫備份語句:
1
2
|
dump database foxhis to 'home/sybase/hotelbackupfile/06.bak' go //把全庫備份拷到以上目錄 |
3.一天又24個小時,為了少寫一些crontab的語句,我們建議各位酒店的edp同事做24個sh文件和24個sql文件,這樣保證不會有錯誤,并且會自動覆蓋昨天的備份,基本起到全自動的備份目的,00.sh/00.sql、01.sh/01.sql .....23.sh/23.sql。也就是說,06和18的sql腳本就用第2點(diǎn)的語句,其它時候就用第1點(diǎn)的語句。把著一對對的文件放到hotelbackup文件后,我們繼續(xù)第三大點(diǎn)crontab的設(shè)置。
三、編寫自動運(yùn)行crontab自動運(yùn)行腳本。
1. 首先用sybase用戶登錄,切忌不要用root。
2. 然后輸入以下語句:
-bash-3.2$ crontab -e
//啟動crontab編輯模式,編輯完成完成后按"esc"并輸入":wq"保存退出
3. 我們在后面添加如下語句:
意思很明顯每天的1點(diǎn)、2點(diǎn).....6點(diǎn)30分......18點(diǎn)30分自動執(zhí)行sh的命名,剛剛大家看到sh文件就是調(diào)用sql文件,所以備份當(dāng)您設(shè)置完這個crontab后,按下”esc“再輸入“wq”保存退出后,數(shù)據(jù)庫就會自動開始幫您自動做增量備份了,每天都數(shù)據(jù)會自動自己覆蓋,無需擔(dān)心備份爆慢的情況出現(xiàn)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
0 1 * * * sh /home/sybase/hotelbackup/01.sh 0 2 * * * sh /home/sybase/hotelbackup/02.sh 0 3 * * * sh /home/sybase/hotelbackup/03.sh 0 4 * * * sh /home/sybase/hotelbackup/04.sh 0 5 * * * sh /home/sybase/hotelbackup/05.sh 30 6 * * * sh /home/sybase/hotelbackup/06.sh 0 7 * * * sh /home/sybase/hotelbackup/07.sh 0 8 * * * sh /home/sybase/hotelbackup/08.sh 0 9 * * * sh /home/sybase/hotelbackup/09.sh 0 10 * * * sh /home/sybase/hotelbackup/10.sh 0 11 * * * sh /home/sybase/hotelbackup/11.sh 0 12 * * * sh /home/sybase/hotelbackup/12.sh 0 13 * * * sh /home/sybase/hotelbackup/13.sh 0 14 * * * sh /home/sybase/hotelbackup/14.sh 0 15 * * * sh /home/sybase/hotelbackup/15.sh 0 16 * * * sh /home/sybase/hotelbackup/16.sh 0 17 * * * sh /home/sybase/hotelbackup/17.sh 30 18 * * * sh /home/sybase/hotelbackup/18.sh 0 19 * * * sh /home/sybase/hotelbackup/19.sh 0 20 * * * sh /home/sybase/hotelbackup/20.sh 0 21 * * * sh /home/sybase/hotelbackup/21.sh 0 22 * * * sh /home/sybase/hotelbackup/22.sh 0 23 * * * sh /home/sybase/hotelbackup/23.sh 0 24 * * * sh /home/sybase/hotelbackup/00.sh |
四、通過windows 批處理文件,從linux ftp中把數(shù)據(jù)定時拉出來;(待更新)
五、 備份恢復(fù)。
回復(fù)備份就非常簡單,如果在數(shù)據(jù)在20點(diǎn)30分擔(dān)時候掛掉了,也就是說我們損失了半個小時的數(shù)據(jù),操作方法如下:
1
2
3
4
5
|
load database from foxhis(databasename) 'home/sybase/hotelbackupfile/18.bak' load tran from 'home/sybase/hotelbackupfile/19.log' load tran from 'home/sybase/hotelbackupfile/20.log' go online database foxhis |
只要這簡單的幾個語句就可以把數(shù)據(jù)恢復(fù)過來,非常簡單。