具體方法
代碼如下 復制代碼#!/bin/bash
#Shell Command For Backup MySQL Database Everyday Automatically By Crontab
#Author : Carlos Wong
#Date : 2010-08-24
#配置參數
代碼如下 復制代碼 USER=root #數據庫用戶名" >用戶名#判斷備份文件存儲目錄是否存在,否則創建該目錄
代碼如下 復制代碼 if [ ! -d $BACKUP_DIR ] ;#開始備份之前,將備份信息頭寫入日記文件
代碼如下 復制代碼 echo ” ” >> $LOGFILE#切換至備份目錄
代碼如下 復制代碼 cd $BACKUP_DIR#使用mysqldump 命令備份制定數據庫,並以格式化的時間戳命名備份文件
代碼如下 復制代碼 mysqldump $OPTIONS > $DUMPFILE#判斷數據庫備份是否成功
代碼如下 復制代碼 if [[ $? == 0 ]]; then#創建備份文件的壓縮包
代碼如下 復制代碼 tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1#輸入備份成功的消息到日記文件
代碼如下 復制代碼 echo “[$ARCHIVE] Backup Successful!” >> $LOGFILE#刪除原始備份文件,只需保 留數據庫備份文件的壓縮包即可
代碼如下 復制代碼 rm -f $DUMPFILE#備份失敗後向網站管理者發送郵件提醒,需要mailutils或者類似終端下發送郵件工具的支持
代碼如下 復制代碼 #mail -s “Database:$DATABASE Daily Backup Fail” $WEBMASTER#輸出備份過程結束的提醒消息
代碼如下 復制代碼 echo “Backup Process Done”使用:
01.將以上代碼保存到: /usr/sbin/DataBackup (文件名隨意,只要不跟系統原有的命令同名即可;代碼可以放到任何地方,放在sbin目錄下只是為了方便執行,sbin目錄下的文件/目錄可在終端直接調 用,類似於windows下PATH變量指定的目錄)
02.為腳本添加可執行權限: sudo chmod +x /usr/sbin/DataBackup
03.執行腳本: sudo DataBackup
04.如果需要定時執行備份命令的,只需將下面這段代碼放到crontab 文件(sudo vim /etc/crontab)中去就可以了:
01 3 * * * root /usr/sbin/DataBackup #它代表著將於每天3點執行DataBackup腳本
小注意一下下:
01.linux 下的shell腳本定義變量的格式為: key=value ,注意他們兩者之間的” = “前後不能出現空格,否則系統無法確認該變量。
02.用紅色標注的那行,第一個類似單引號的字符”`”其實不是單引號,它的輸入鍵在鍵盤ESC鍵下方。
03.這個腳本只適合用於一些小站點的備份,因為它是對數據庫進行全部備份而不是增量備份,不適合大容量的數據庫備份。
Update:
由於服務器上的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