Linux下定時備份MySQL資料庫的Shell指令碼

來源:互聯網
上載者:User

標籤:

Linux下定時備份MySQL資料庫的Shell指令碼 

對任何一個已經上線的網站網站來說,資料備份都是必須的。無論版本更新還是伺服器遷移,備份資料的重要性不言而喻。人工備份資料的方式不單耗費大量時間和精力,還灰常不專業的說。於是,有了下面這段指令碼的出現。參考了網上的很多教程,外加自己的測試,以下指令碼經測試可用。

#!/bin/bash
#Shell Command For Backup MySQL Database Everyday Automatically By Crontab
#Author : Carlos Wong
#Date : 2010-08-24
#配置參數
USER=root #資料庫使用者名稱
PASSWORD=××××× #資料庫使用者密碼
DATABASE=TIENIUZAI #資料庫名稱
[email protected] #管理員郵箱地址,用以發送備份失敗訊息提醒
BACKUP_DIR=/var/www/Data_Backup/topons/ #備份檔案儲存路徑
LOGFILE=/var/www/Data_Backup/topons/data_backup.log #日記檔案路徑
DATE=`date ‘+%Y%m%d-%H%M’` #日期格式(作為檔案名稱)
DUMPFILE=$DATE.sql #備份檔案名
ARCHIVE=$DATE.sql.tgz #壓縮檔名
OPTIONS=”-u$USER -p$PASSWORD –opt –extended-insert=false –triggers=false -R –hex-blob –flush-logs –delete-master-logs -B $DATABASE” #mysqldump 參數 詳情見協助 mysqldump -help

#判斷備份檔案儲存目錄是否存在,否則建立該目錄
if [ ! -d $BACKUP_DIR ] ;
then
mkdir -p “$BACKUP_DIR”
fi

#開始備份之前,將備份資訊頭寫入日記檔案
echo ” ” >> $LOGFILE
echo ” ” >> $LOGFILE
echo “———————————————–” >> $LOGFILE
echo “BACKUP DATE:” $(date +”%y-%m-%d %H:%M:%S”) >> $LOGFILE
echo “———————————————– ” >> $LOGFILE

#切換至備份目錄
cd $BACKUP_DIR
#使用mysqldump 命令備份制定資料庫,並以格式化的時間戳記命名備份檔案
mysqldump $OPTIONS > $DUMPFILE
#判斷Database Backup是否成功
if [[ $? == 0 ]]; then
#建立備份檔案的壓縮包
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
#輸入備份成功的訊息到日記檔案
echo “[$ARCHIVE] Backup Successful!” >> $LOGFILE
#刪除原始備份檔案,只需保 留Database Backup檔案的壓縮包即可
rm -f $DUMPFILE
else
echo “Database Backup Fail!” >> $LOGFILE

#備份失敗後向網站管理者發送寄件提醒,需要mailutils或者類似終端下發送郵件工具的支援
#mail -s “Database:$DATABASE Daily Backup Fail” $WEBMASTER
fi
#輸出備份過程結束的提醒訊息
echo “Backup Process Done”


使用:

  1. 將以上代碼儲存到: /usr/sbin/DataBackup (檔案名稱隨意,只要不跟系統原有的命令同名即可;代碼可以放到任何地方,放在sbin目錄下只是為了方便執行,sbin目錄下的檔案/目錄可在終端直接調用,類似於windows下PATH變數指定的目錄)
  2. 為指令碼添加可執行許可權: sudo chmod +x /usr/sbin/DataBackup
  3. 執行指令碼: sudo DataBackup
  4. 如果需要定時執行備份命令的,只需將下面這段代碼放到crontab 檔案(sudo vim /etc/crontab)中去就可以了:

01 3 * * * root /usr/sbin/DataBackup #它代表著將於每天3點執行DataBackup指令碼
注意:

  1. linux 下的shell指令碼定義變數的格式為: key=value ,注意他們兩者之間的” = “前後不能出現空格,否則系統無法確認該變數。
  2. 用紅色標註的那行,第一個類似單引號的字元”`”其實不是單引號,它的輸入鍵在鍵盤ESC鍵下方。
  3. 這個指令碼只適合用於一些小網站的備份,因為它是對資料庫進行全部備份而不是增量備份,不適合大容量的Database Backup。

Update:

2010-08-24 :由於伺服器上的MySQL設定檔裡 的socket項值為 “/tmp/mysql.sock”, 而mysqldump在連結mysql server的時候會去尋找位於/var/lib/mysql/目錄下的mysql.sock檔案。如果沒有則會報錯:
mysqldump: Got error: 2002: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
解決方案是:

一是,修改mysql設定檔裡的socket項的值為 ’/var/lib/mysql/mysql.sock’,不過這種方法需要重啟mysql服務,很不厚道。

二是,為/tmp/mysql.sock建立一個軟連結到/var/lib/mysql/mysql.sock:
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

Linux下定時備份MySQL資料庫的Shell指令碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.