標籤:shell linux mysql 自動備份
荀彧(花名)
Background:鑒於QAS資料庫曾遭到毀滅性損害,極其桑心L。為了避免這種玉石俱焚的狀況再度發生,於是我們找出了一種應對方案。這裡給大家分享一下如何?定時備份mysql資料庫的指令碼。
Target:每天對QAS資料庫進行資料及表的備份並且刪除掉10天之前的備份檔案。
Working:三個步驟搞定。
Step 1: 準備兩個檔案
建備份檔案夾qas_db_bak,建指令檔autobackupmysql_qas.sh
[[email protected]***** wewang]# ls
autobackupmysql_qas.sh qas_db_bak
開啟指令檔:
[[email protected]***** wewang]# vi autobackupmysql_qas.sh
在指令碼中新增內容:
#!/bin/bash backupdir=/home/**/wewang/qas_db_bak Now=$(date +"%Y-%m-%d--%H:%M:%S") /usr/bin/mysqldump -u ghs -pacxiom qas|gzip > $backupdir/qas_bak_$Now.sql.gz find $backupdir -name "qas_bak_*.sql.gz" -type f -mtime +10 -exec rm {} \; > /dev/null 2>&1 |
:wq 返回退出後,對檔案進行執行許可權的更改,保證指令碼可以被執行:
[[email protected]***** wewang]# chmod +xautobackupmysql_qas.sh
如下:
解析:
name:自訂備份檔案首碼標識。
-type f 表示尋找普通類型的檔案,f表示普通檔案。
-mtime +10 按照檔案的更改時間來尋找檔案,+10表示檔案更改時間距現在10天以前;如果是 -mmin +10 表示檔案更改時間距現在5分鐘以前。
-exec rm {} \; 表示執行一段shell命令,exec選項後面跟隨著所要執行的命令或指令碼,然後是一對兒{ },一個空格和一個\,最後是一個分號。
/dev/null 2>&1 把標準出錯重新導向到標準輸出,然後扔到/DEV/NULL下面去。通俗的說,就是把所有標準輸出和標準出錯都扔到垃圾桶裡面;其中的&表示讓該命令在後台執行。
Step 2: 更改定時執行指令碼,這裡有兩種case:
Case 1: 一般情況。開啟自動執行檔案 /etc/crontab,在crontab檔案中加入如下內容,讓其自動執行任務
[[email protected] wewang]# vi /etc/crontab
添加如下代碼:
這裡的例子是每小時26分的時候執行:
26 * * * * root /home/**/wewang/autobackupmysql_qas.sh
若是每天三點執行,則:
00 3 * * * root /home/**/wewang/autobackupmysql_qas.sh
Case 2: Redhat情況。(也就是當前用的Linux系統)將剛才編輯的指令碼複製到相應的目錄即可
[[email protected]***** wewang]# cp autobackupmysql_qas.sh /etc/cron.daily/ |
如下:
解析: 這裡是每天4點28分左右才執行,但是這個job執行的時間也是隨機的。
Redhat的crontab採用按時間調用4個目錄(
/etc/cron.hourly:每小時;
/etc/cron.daily:每天;
/etc/cron.weekly:每周;
/etc/cron.monthly:每月)中指令碼出來啟動並執行方式。
Step 3: 重啟etc
[[email protected] wewang]# /etc/rc.d/init.d/crondrestart
Stopping crond: [ OK ]
Starting crond: [ OK ]
定時備份的效果如下:
Ps: 如果想要解壓查看,則通過命令查看:gunzip -c qas-bak-2015-07-30--04:29:02.gz > 1.bak
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
程式猿(媛)Shell指令碼必備技能之一: 在Linux下如何自動備份mysql資料