程序猿(媛)Shell腳本必備技能之一: 在Linux下如何自動備份mysql數據


作者:荀彧(花名)


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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章