参考:さくらインターネット環境で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宛にメールが入ります。エラーがなければメールは着ません。
設定したばかりの時はチェックしましょう。
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)