#
ドキュメント

Document

自分のための備忘録です。

Shell Script サンプル

データベースバックアップ

#!/bin/sh

# バックアップ先ディレクトリ
# BKDIR=/var/www/sample/backup/database/full
BKDIR=/data/sample/backup/database/full

# 本スクリプトパス
MYPATH=$(cd $(dirname $0);pwd)

#世代管理(何日分残すか)
DAYAGO="31"

# MySQユーザー
USER=admin

# MySQLパスワード
PASS=password

# 日付・時刻取得し変数に代入
TIMESET=`date +%Y%m%d-%H%I%M`

# バックアップ先ファイル名を設定 
# 設定ファイルにあるファイル名+日付.tar.gzする
BKFILE=${BKDIR}/mysql.$TIMESET.tar.gz

# データベース名取得
DBNAME=sample

# DBNAMEデータベースをmysqldumpでバックアップ
# $?は最後に実行したコマンドの戻り値
mysqldump --user=${USER} --password=${PASS} $DBNAME --opt  > ${BKDIR}/$(date "+${DBNAME}-%Y%m%d%H%M%S").sql | logger -t mysqldump
if [ $? = 0 ]; then
  logger -t mysqldump "Backup OK mysqldump:${DBNAME}"
else
# 失敗したらその旨を表示かつ、ログに保存、メール送信
  logger -t mysqldump "Backup NG mysqldump:${DBNAME}"
fi

# yyyymmdd形式のファイルから古い物を削除
# 削除する日付(yyyymmdd)を設定(DAYAGO日前の日付を求める)
tday=`date -d "${DAYAGO} day ago" +%Y%m%d`

# 対象Dir配下のファイル名をwhileに渡し「$list」となる
ls $BKDIR | while read list
do
   #ファイル名に「数字x14」が含まれている場合、
   if  expr "$list" : "sample\-[0-9]\{14\}.sql" > /dev/null; then
      # $listから、「yyyymmdd」を取り出しepoch時間($fday)にする
      fday=`expr $list : "sample\-\([0-9]\{8\}\)[0-9]\{6\}.sql"`
      #ファイル名から取得した「yyyymmdd」がDAYAGOの「yyyymmdd」よりも小さいとき削除
      if [ -n "$fday" ] && [ $fday -lt $tday ]; then
         # echo する
         # echo $list
         #削除する
         `sudo rm -f ${BKDIR}/${list}`
      fi
   fi
done