さくらサーバーでmysqldumpでDBのバックアップをする

参考:さくらインターネット環境でDBデータをcronで自動バックアップする

shファイルをcronで動かして、毎朝、mysqldumpでバックアップを作成します。

backup.sh
※shのパーミッションは705
※バックアップDirのパーミッションは755でもいいと思いますが、777で。
※sh、バックアップDirの両方をwwwと同じところにアップします。

#!/bin/sh

# ----- 設定 -----

# バックアップ元のデータベース
DBNAME=databasename # ←DB名
DBLOGINID=username # ←ユーザ名
DBPASS=password # ←パスワード
DBSERVER=mysql***.db.sakura.ne.jp # ←DBが乗っているホスト名

PATH=/bin:/usr/bin:/usr/local/bin

# 保存する日数
bk_days=7 # ←7日後に削除される

# ---------- ファイル名を設定 ----------
# タイムスタンプを取得
TSNOW=`date +%Y%m%d`
TSOLD=`date "-d$bk_days days ago" +%Y%m%d`

# バックアップ先のディレクトリ・ファイル
bk_dir=/home/XXXXXXXXXX/db_backup/

# ファイル名を設定
file_temp=filaname_$TSNOW.sql
file_backup=filaname_$TSNOW.tar.gz
file_remove=filaname_$TSOLD.tar.gz

# ---------- バックアップ処理 ----------
# バックアップ先のディレクトリに移動
cd $bk_dir
if [ $? != 0 ]; then
echo "Backup directory does not exist."
exit 1
fi

# データベースをダンプ
mysqldump -Q -h $DBSERVER -u $DBLOGINID -p$DBPASS $DBNAME > $file_temp
if [ $? != 0 -o ! -e $file_temp ]; then
echo "Cannot dump database."
exit 1
fi

# アーカイブを作成
tar cfz $file_backup $file_temp
if [ $? != 0 -o ! -e $file_backup ]; then
echo "Cannot archive files."
exit 1
fi

# テンポラリファイルを削除
rm -f $file_temp

# ローテーション処理
if [ -e $file_remove ]; then
rm -f $file_remove
fi

exit 0

参考サイトのソースをコピーしてDB設定を変更すればバックアップは作成できますが、私の環境ではローテーションの削除ができませんでした。バックアップが溜まる一方で削除されません。同じさくらサーバーなのにフシギです。

usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]

こんなエラーが出ます。
dateの指定が違うということなので、

TSOLD=`date -v-"$bk_days"d +%Y%m%d`

とか

TSOLD=`date -v-3d +%Y%m%d`

とかを設定してみましたが、古いファイルの削除ができませんでした。

なので、ローテーションの削除部分は、
参考:03.さくらインターネットでシェルスプリクトを使って古いファイルの削除を行う

find $bk_dir -type f -mtime +10 | xargs rm -f

このように変更しました。
9回分を残して削除します。11にすると10回分になります。
10回分を残します。

cronはさくらの管理画面から1日1回毎朝4時で

/home/XXXXXXXXXX/backup.sh 1> /dev/null

と設定しました。
エラーとか失敗時はpostmaster宛にメールが入ります。エラーがなければメールは着ません。
設定したばかりの時はチェックしましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)