Linux dump命令用于備份文件系統(tǒng)。
站在用戶的角度思考問題,與客戶深入溝通,找到遂川網(wǎng)站設(shè)計(jì)與遂川網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋遂川地區(qū)。
dump為備份工具程序,可將目錄或整個(gè)文件系統(tǒng)備份至指定的設(shè)備,或備份成一個(gè)大文件。
語法:
dump[-cnu][-0123456789][-b
區(qū)塊大小][-B區(qū)塊數(shù)目][-d密度][-f設(shè)備名稱][-h層級(jí)][-s磁帶長度][-T日期][目錄或文件系統(tǒng)]或dump[-wW]
參數(shù):
-0123456789 備份的層級(jí)
-b區(qū)塊大小 指定區(qū)塊的大小,單位為KB
-B區(qū)塊數(shù)目 指定備份卷冊(cè)的區(qū)塊數(shù)目
-c 修改備份磁帶預(yù)設(shè)的密度與容量
-d密度 設(shè)置磁帶的密度,單位為BPI
-f設(shè)備名稱 指定備份設(shè)備
-h層級(jí) 當(dāng)備份層級(jí)等于或大于指定的層級(jí)時(shí),將不備份用戶標(biāo)示為nodump的文件
-n 當(dāng)備份工作需要管理員介入時(shí),向所有operator群組中的使用者發(fā)出通知
-s磁帶長度 備份磁帶的長度,單位為英尺
-T日期 指定開始備份的時(shí)間與日期
-u 備份完畢后,在/etc/dumpdates中記錄備份的文件系統(tǒng),層級(jí),日期與時(shí)間等
-w 與-W類似,但僅顯示需要備份的文件
-W 顯示需要備份的文件及其最后一次備份的層級(jí),時(shí)間與日期。
首先tar命令能夠指定生成的文件的名字,
可以 先用命令取得系統(tǒng)的時(shí)間,然后把日期復(fù)制給一個(gè)變量,
這樣tar命令,就可以用那個(gè)變量當(dāng)作生成文件的名字了。
計(jì)劃任務(wù)使用crontab
linux系統(tǒng)下使用腳本定時(shí)備份數(shù)據(jù)庫,代碼如下:
#!/bin/bash
#Setting
#設(shè)置數(shù)據(jù)庫名,數(shù)據(jù)庫登錄名,密碼,備份路徑,日志路徑,數(shù)據(jù)文件位置,以及備份方式
#默認(rèn)情況下備份方式是mysqldump,還可以是mysqldump,mysqldotcopy,如果注釋掉第
#18行,則默認(rèn)以tag的方式備份
#默認(rèn)情況下,用root(空)登錄mysql數(shù)據(jù)庫,備份至/root/dbxxxxx.tgz
DBName=mysql
DBUser=root
DBPasswd=123456
BackupPath=/home/wang/www/backup/mysql/mysqlbackup
LogFile=/home/wang/www/backup/mysql/db.log
DBPath=/var/lib/mysql/
#BackupMethod=mysqldump
#BackupMethod=mysqlhotcopy
#BackupMethod=tar
#Setting End
NewFile="$BackupPath"db$(date +%y%m%d).tgz
DumpFile="$BackupPath"db$(date +%y%m%d)
OldFile="$BackupPath"db$(date +%y%m%d --date='5 days ago').tgz
echo "-------------------------------------------" $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") $LogFile
echo "--------------------------" $LogFile
#Delete Old File
if [ -f $OldFile ]
then
rm -f $OldFile $LogFile 21
echo "[$OldFile]Delete Old File Success!" $LogFile
else
echo "[$OldFile]No Old Backup File!" $LogFile
fi
if [ -f $NewFile ]
then
echo "[$NewFile]The Backup File is exists,Can’t Backup!" $LogFile
else
case $BackupMethod in
mysqldump*)
if [ -z $DBPasswd ]
then
mysqldump -u $DBUser --opt $DBName $DumpFile
else
mysqldump -u $DBUser -p$DBPasswd --opt $DBName $DumpFile
fi
tar czvf $NewFile $DumpFile $LogFile 21
echo "[$NewFile]Backup Success!" $LogFile
rm -rf $DumpFile
;;
mysqlhotcopy*)
rm -rf $DumpFile
mkdir $DumpFile
if [ -z $DBPasswd ]
then
mysqlhotcopy -u $DBUser $DBName $DumpFile $LogFile 21
else
mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile $LogFile 21
fi
tar czvf $NewFile $DumpFile $LogFile 21
echo "[$NewFile]Backup Success!" $LogFile
rm -rf $DumpFile
;;
*)
/etc/init.d/mysqld stop /dev/null 21
tar czvf $NewFile $DBPath $LogFile 21
/etc/init.d/mysqld start /dev/null 21
echo "[$NewFile]Backup Success!" $LogFile
;;
esac
fi
echo "-------------------------------------------"
echo
#lftp -f l 如果有FTP可同時(shí)上傳ftp中。
再利用crontab命令生成/var/spool/cron/root 文件:
#crontab –e
//打開一個(gè)編輯窗口,第一行會(huì)有內(nèi)容格式的提示,在此輸入命令
//m h dom mon dow command
//具體意義表示:分鐘 小時(shí) 日期 月份 星期 命令,在某月(mon)的某天(dom)或者星期幾(dow)的幾點(diǎn)(h,24小時(shí)制)幾分(m)執(zhí)行某個(gè)命令(command)
//如: 10 02 * * * /home/backup/autobackupmysql.sh (表示零晨二點(diǎn)十分執(zhí)行備份腳本)
備份系統(tǒng)
我該如何備份我的Ubuntu系統(tǒng)呢?很簡單,就像你備份或壓縮其它東西一樣,使用TAR。和Windows不同,Linux不會(huì)限制root訪問任何東西,你可以把分區(qū)上的所有東西都扔到一個(gè)TAR文件里去!
首先成為root用戶:
$ sudo su
然后進(jìn)入文件系統(tǒng)的根目錄(當(dāng)然,如果你不想備份整個(gè)文件系統(tǒng),你也可以進(jìn)入你想要備份的目錄,包括遠(yuǎn)程目錄或者移動(dòng)硬盤上的目錄):
# cd /
下面是我用來備份系統(tǒng)的完整命令:
# tar cvpzf backup.tgz –exclude=/proc –exclude=/lost+found –exclude=/backup.tgz –exclude=/mnt –exclude=/sys /
讓我們來簡單看一下這個(gè)命令:
“tar”當(dāng)然就是我們備份系統(tǒng)所使用的程序了。
“cvpfz”是tar的選項(xiàng),意思是“創(chuàng)建檔案文件”、“保持權(quán)限”(保留所有東西原來的權(quán)限)、“使用gzip來減小文件尺寸”。
“backup.gz”是我們將要得到的檔案文件的文件名。
“/”是我們要備份的目錄,在這里是整個(gè)文件系統(tǒng)。
在
檔案文件名“backup.gz”和要備份的目錄名“/”之間給出了備份時(shí)必須排除在外的目錄。有些目錄是無用的,例如“/proc”、“
/lost+found”、“/sys”。當(dāng)然,“backup.gz”這個(gè)檔案文件本身必須排除在外,否則你可能會(huì)得到一些超出常理的結(jié)果。如果不把“
/mnt”排除在外,那么掛載在“/mnt”上的其它分區(qū)也會(huì)被備份。另外需要確認(rèn)一下“/media”上沒有掛載任何東西(例如光盤、移動(dòng)硬盤),如果
有掛載東西,必須把“/media”也排除在外。
有人可能會(huì)建議你把“/dev”目錄排除在外,但是我認(rèn)為這樣做很不妥,具體原因這里就不討論了。
執(zhí)行備份命令之前請(qǐng)?jiān)俅_認(rèn)一下你所鍵入的命令是不是你想要的。執(zhí)行備份命令可能需要一段不短的時(shí)間。
備份完成后,在文件系統(tǒng)的根目錄將生成一個(gè)名為“backup.tgz”的文件,它的尺寸有可能非常大?,F(xiàn)在你可以把它燒錄到DVD上或者放到你認(rèn)為安全的地方去。
在備份命令結(jié)束時(shí)你可能會(huì)看到這樣一個(gè)提示:’tar: Error exit delayed from previous errors’,多數(shù)情況下你可以忽略它。
你還可以用Bzip2來壓縮文件,Bzip2比gzip的壓縮率高,但是速度慢一些。如果壓縮率對(duì)你來說很重要,那么你應(yīng)該使用Bzip2,用“j”代替命令中的“z”,并且給檔案文件一個(gè)正確的擴(kuò)展名“bz2”。完整的命令如下:
# tar cvpjf backup.tar.bz2 –exclude=/proc –exclude=/lost+found –exclude=/backup.tar.bz2 –exclude=/mnt –exclude=/sys /
2、系統(tǒng)日志備份
只需要將日志文件移動(dòng)到備份目錄下
然后將日志壓縮打包,并刪除日志文件
最后重建日志文件
#!/bin/bash
#
nginx_app=/usr/local/nginx/sbin/nginx
logs_dir=/usr/local/nginx/logs
bak_dir=/tmp/logbak/
date=`date +%Y%m%d`
#
#先將日志文件移動(dòng)到備份目錄
cd $logs_dir
echo “moving logs”
mv *.log $bak_dir
sleep 3
#
#重建log文件
echo “rebuild logs”
echo “$nginx_app -s reopen”
$nginx_app -s reopen
#
#打包log文件,并以日期命名
echo “tar log”
cd $bak_dir
tar czf $date.tgz *.log
#
#刪除備份目錄的臨時(shí)文件
echo “rm logs”
rm -f *.log
echo “done”
然后添加個(gè)計(jì)劃任務(wù),比如每天凌晨4點(diǎn)半執(zhí)行,腳本位置在/root/logbak.sh
crontab -e
30 4 * * * sh /root/logbak.sh