WDclip*Resources | web design resources

シェルスクリプトとCronでCSSclipのデータベースを自動バックアップ化アンドバキューム化してみました

09年02月21日

たまにCSSclipのデータベースはバックアップしていたのですが、複数のWordPresを使っているのでめんどくさくなって、DxDさんを参考にバックアップの自動化をしました。ついでにテーブルの最適化も自動化してみました。

シェルスクリプトとCronでデータベースを自動バックアップ&ローテーション – (DxD)∞

CSSclipで使っているサーバーはhetemlです。最近、hetemlさんは容量が3Gから5Gに変更されました。個人ユースのレンタルサーバーでそんなに使う人いるのかなと思いながら、ちょっとうれしさもあります。ありがとうです。

でまずcronディレクトリ、backup-mysqlディレクトリを作って、シェルスクリプトは、backup_mysql_***.shとして


#!/bin/sh

# ---------- 設定 ----------
# バックアップ元のデータベース
db_host=mysql**.heteml.jp
db_name=***
db_user=***
db_pass=*******

# バックアップ先のディレクトリ・ファイル
bk_dir=/home/sites/heteml/users*/******/web/cron/backup-mysql/
bk_file=$db_name

# 保存する日数
bk_days=10

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

# ファイル名を設定
file_temp=$bk_file.sql
file_backup=$bk_file.$ts_now.tar.gz
file_remove=$bk_file.$ts_old.tar.gz

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

# データベースをダンプ
mysqldump -h$db_host $db_name -u$db_name -p$db_pass --opt > $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

# ---------- 最適化処理 ----------
mysqlcheck -o -h$db_host -u$db_user -p$db_pass $db_name

exit 0

となります。

ただhetemlさんの場合、ローテーション処理で古いバックアップファイルを削除が出来ないようです。PHPでのcronも無理でした。ブラウザでPHPファイルを開いたら削除するようですけど。

あとテーブルの最適化は、念のためバックアップ処理後に実行しています。

しかしながら結局、バックアップファイルの処理に困ってます。CSSclip関係だけでsqlファイルが50Mもあるしなぁと。やっぱりGmailに転送するのが一番でしょうか。結局同じサーバーにバックアップを取ってても意味ないところがあるんで。

hetemlみたいにデータベースサーバーが、localhostでない場合に参考にしてもらえたらとメモしときます。