画像やリンクが無効になっている可能性もあるのでご了承下さい。
大分前、適当にシェルスクリプトを書いて放置していた物に少し手を入れて汎用性を多少持たせたのでメモ代わりに貼っておこうかと思う。
当方では運用上、Linux アカウントを分けて動作させている物がちらほらとあるので、このスクリプトを ~/bin にそれぞれ置いて実行させるようにしている。
やっている事
- public_html 以下を tar でまとめて gzip。PHP は apache ユーザー権限で動いているので sudo で一時的に root となっている。
- Database は mysqldump でダンプした物をリダイレクトしてファイルに落としている。
- バックアップした WordPress 本体が入る tar 玉は root ユーザの物なので、chown してやる。
- それぞれの動作時、stdout 経由でメッセージを出力。
mysqldump の引数に “-p” を付けていないのは “.my.cnf” に予めパスワードを記述している為。通常であれば man mysqldump に書いてある通り、”-p[password]” を付加する事。”-p” とパスワードの間にスペースを入れてはならない。
スクリプトは以下。
#!/bin/bash
# Identity
ident=識別する為の適当な名前
# Username
user=バックアップしたファイルの所有者を指定
# Database
dbuser=MySQL に接続する為のユーザ名
dbname=バックアップする Database 名
# Backup Source
srcDir=バックアップ元のパス指定
# Backup Destination
dstDir=バックアップ先のパス指定
# Backup filename
fname=$ident`date +%Y%m%d%S`
printf "1 of 3 - Now Creating backup [$fname.tar.gz]\n"
sudo tar czf $dstDir/$fname.tar.gz $srcDir 2> /dev/null
printf "2 of 3 - Now Creating SQL backup [$fname.sql]\n"
/usr/bin/mysqldump -u $dbuser $dbname > $dstDir/$fname.sql
printf "3 of 3 - Changing Owner [$fname.(sql|tar.gz)]\n"
sudo chown $user.$user $dstDir/$fname.*
printf "Done. $dstDir/$fname.tar.gz and sql\n"
出来上がるファイル名にはタイムスタンプを入れているので「ほぼ」ユニークな名前になる。
実際うちで使っている物だと “srcDir=~/public_html” として “dstDir” には物理的に異なる HDD をマウントしたポイントを指定している。
異なる Linux ユーザでこのスクリプトを用いる場合、必要な変数を変更してやるだけで使えるので楽が出来る。
以後改良するのであれば世代管理をさせる位かなと。
尚、バックアップしたファイルを復元させるには、ユーザのホームディレクトリで tar.gz なアーカイブを展開するだけ。sql ファイルは mysql コマンドにリダイレクトで喰わせれば良い。
コメント