作者:荀彧(花名)
Background:鑑於QAS數據庫曾遭到毀滅性損害,極其桑心L。爲了避免這種玉石俱焚的狀況再度發生,於是我們找出了一種應對方案。這裏給大家分享一下如何實現定時備份mysql數據庫的腳本。
Target:每天對QAS數據庫進行數據及表的備份並且刪除掉10天之前的備份文件。
Working:三個步驟搞定。
Step 1: 準備兩個文件
建備份文件夾qas_db_bak,建腳本文件autobackupmysql_qas.sh
[root@vm***** wewang]# ls
autobackupmysql_qas.sh qas_db_bak
打開腳本文件:
[root@vm***** 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 返回退出後,對文件進行執行權限的更改,保證腳本可以被執行:
[root@vm***** 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文件中加入如下內容,讓其自動執行任務
[root@vm10074 wewang]# vi /etc/crontab
添加如下代碼:
這裏的例子是每小時26分的時候執行:
26 * * * * root /home/**/wewang/autobackupmysql_qas.sh
若是每天三點執行,則:
00 3 * * * root /home/**/wewang/autobackupmysql_qas.sh
Case 2: Redhat情況。(也就是當前用的Linux系統)將剛纔編輯的腳本複製到相應的目錄即可
[root@vm***** 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
[root@vm10074 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