各ディレクトリごと、各データベースごとにバックアップをとるシェルスクリプト

以前、「MySQLとWebディレクトリのバックアップをとるシェルスクリプト」という記事でMySQLとWebディレクトリのバックアップをとるシェルスクリプトを紹介したが、これは全てのデータベース、Webディレクトリをそれぞれまるっと一つの圧縮ファイルにまとめるものだった。

複数のサイトを一つのサーバーで運営しているが、容量が増えるに連れ、単一ファイルに圧縮してしまうと特定のサイトだけリストアしたいときや、バックアップの一部を別ホストに移動したいときなどに不都合がでてくるようになった。

そこで、MySQLサーバーのデータベース一覧を取得して各データベースごとに圧縮、指定したディレクトリ以下のディレクトリ(もしくはファイル)ごとに圧縮するようにシェルスクリプトを改良してみた。

#!/bin/sh

# 何日分保存するか
period=3
# バックアップしたいディレクトリ
wwwdir=/var/www
# バックアップ保存先ディレクトリ
dirpath=/home/backup
# 今日のバックアップを保存するディレクトリ
todaydir=`date '+%Y%m%d'`
# DBユーザー
dbuser=hoge
# DBパスワード
dbpassword=xxxxx

# 今日のバックアップを保存するディレクトリを作成
mkdir $dirpath/$todaydir

# MySQLバックアップ
for i in `mysql -u$dbuser -p$dbpassword -e "show databases"`
do
    if [ $i == "Database" ]; then
        continue
    fi;
    mysqldump $i -u$dbuser -p$dbpassword --opt | gzip > $dirpath/$todaydir/mysql.$i.sql.tar.gz
done;

# ディレクトリバックアップ
for i in `ls $wwwdir`
do
   tar cvfz $dirpath/$todaydir/www.$i.tar.gz $wwwdir/$i
done
chown -R all:all $dirpath/$todaydir

olddir=`date -d "$period days ago" '+%Y%m%d'`
rm -rf $dirpath/$olddir

実行すると、下記のようなファイルが生成される。あとはこれを別ファイルに転送するようにcronに設定すれば良い。その際は「さくらのレンタルサーバーで、WebディレクトリとMySQLを圧縮し、自動的に外部にバックアップする方法」を参考にされると良いかも…。

/home/backup
 ┗ /20130129/
  ┣ mysql.site-a.sql.tar.gz
  ┣ www.site-a.tar.gz
  ┣ mysql.site-b.sql.tar.gz
  ┗ www.site-b.tar.gz

MW WP Form

MW WP Form はショートコードベースのフォームプラグインです。多くの機能を持っており、例えば、多くのバリデーションルール、問い合わせデータの保存、そしてグラフ機能集計などを使用することができます。

さらに詳しく
Habakiri

Habakiri

Bootstrap ベースのシンプルな WordPress テーマ。レスポンシブ、多くのカスタマイズ機能。圧縮された CSS・JS を使用する高速化対策。Microformats 対応。Sass、クラスベースの functions.php。

さらに詳しく
basis-stylus

Basis

軽量なレスポンシブ Stylus/CSS フレームワーク。Flexbox ベースのグリッドシステム、疎結合なコンポーネント、バーティカルリズム。

さらに詳しく