MovableTypeサイトをローカルにフルバックアップする方法(ファーストサーバ問題を受けて)

cronにて自動化 Apple Mac
cronにて自動化

 

(お約束)ご利用は自己責任でお願いします

ワードプレス版はこちら

ファーストサーバ問題により、バックアップをサーバに置いておいても意味無いじゃん!ってことになってきてます(´・ω・)

で、違うオンラインストレージを借りてそこにバックアップするのもいいんですが、お金がかかります。
せっかくの目の前にパコソンがあるので、そのHDD内にバックアップしようという話です。
ローカルに落とせばMacのTimeMachineで世代管理も完璧です。

MTには標準でバックアップする方法がありますが、いまどき手動でバックアップするスタイル(´・ω・`)。ここでは全自動で行います。

方法としては

  1. mysql DBをmysqldump機能を使って定時に全バックアップ。
    サーバ側でcronが使えることが条件です。cronが使えないと結局手動になります。
  2. UNIXコマンドwgetにてローカルにダウンロード
     ※OSXには標準でwgetがインストールされていないです。そんなときはMacportsを入れてwgetをインストール
     ※Windowsでのwgetはこれまたインストールすれば動くでしょう。
  3. それをcronにて自動化
     ※OSXでは標準で入っているはずです。Windowsでcronはどうか知りません(笑)。でもWinには他に自動化するツールとかありそうですけどね。
これを一回設定さえすれば、 MTサイトの完全なバックアップがローカルHDDに毎日ゲットできます。
では、まずはmysqlを全バックアップします。
MySQLの定期的バックアップ(cron) : Project MultiBurst
ここを参考にしました。ありがとうございます。
しかし自分のサーバではGNU dateが使えないので、findコマンドにて古いバックアップを削除する仕組みを作りました。
rm という削除コマンドを使っていますので、設定に失敗すると思わぬファイルが消えるかもしてません。
使うときはよくテストして下さい。
#!/bin/sh

# バックアップしたファイルを保存するディレクトリを指定
BackupDIR=/home/xxx/mysql_backup 

# MySQLのダンプ処理(とりあえず一時ファイルとして保存)
/usr/local/bin/mysqldump --default-character-set=binary -u (mysqlアカウント) --password='(mysqlパスワード)' --opt (DB名) > $BackupDIR/temp.sql 

# 改めてバックアップ元ファイルとして指定
srcfile=$BackupDIR/temp.sql

# タイムスタンプの取得
timestamp=`date +%Y%m%d` 

#バックアップファイルのファイル名生成
bkfile=$BackupDIR/$timestamp.tar.gz

#固めます

tar zcvf $bkfile $srcfile > /dev/null 2>&1

#30日以上過ぎた古いバックアップ*.gzを削除する処理
find $BackupDIR -type f -mtime +30 -name "*.gz" -exec rm -f {} \;

#tempファイルを削除
rm -f $BackupDIR/temp.sql

参考:
findコマンドはUNIXコマンド [find]

で、これを mysql_backup.sh などとしてサーバー側のどこかに保存します。そしてサーバ側のcronで一日一回動かしてバックアップを取って下さい。

これでmysqlの全バックアップを一日一回取得する仕組みができました。

 

(お約束)ご利用は自己責任でお願いします

 

さて次にこのサーバ内にあるバックアップファイルや、アップロードしたファイルなどをローカルにwgetでダウンロードしてきます。

先ほどバックアップしたのはDB情報だけでアップロードした写真などはバックアップされていません。

なので、ダウンロードしてくるのは、サイトのルートから全部を落としてくればいいと思います。

 

shを使って書きます。
これを backupget.sh などとして保存します。

#!/bin/csh -f
#
WgetFunc="/usr/local/bin/wget"
BackUpLocalDir="(ローカル側のディレクトリを指定 例:/Volumes/HDD/full_backup )"

LogFile="(ログファイルを指定 例:/Volumes/HDD/full_backup/log.txt"
FtpAccount="(FTPアカウント名)"
FtpPass="(FTPパスワード)"
FtpServer="(FTPサーバ名)"
FtpDir="(ダウンロードしたいサーバ側のディレクトリ名 例:/home/hoge/)"

#

${WgetFunc} -r -N -np -P ${BackUpLocalDir} -a ${LogFile} ftp://${FtpAccount}:${FtpPass}@${FtpServer}${FtpDir}

#

-r は必ず付けて下さい。これを付けないとディレクトリをダウンロードできません。あとのオプションなどは各自調べてみてください。
Linuxコマンド集 – 【 wget 】 ファイルをダウンロードする:ITpro
ダウンロードコマンドwgetのオプション一覧(linux)

これをターミナル.appで動かしてみて下さい。動けばちゃんとローカルディレクトリにダウンロードしてくるはずです。こちらを参考にしてください。

xxxxx:$ sh backupget.sh
以前のWordpress全バックアップと違いファイルを固めずに全部落としてくるので、確認のためにこのスクリプトでダウンロードしたものと、ftpクライアント(Cyberduckなど)でダウンロードとしたものを比較することをおすすめします。オプションの設定間違いなどによって取り逃がしているものがあるかもしれません。
 で、ちゃんと動くことがわかれば、OSXのcronにて自動化します。crontabコマンドで打ってもいいんですが、使いやすいアプリがあるので、それを使うことにします→cronnix
cronにて自動化
cronにて自動化

 

とこんな感じで設定すれば、毎日3時半に勝手にダウンロードしてくれて、ローカルに完全なバックアップが手に入ります。

 

(お約束)ご利用は自己責任でお願いします

以上。

 

 

 

コメント

  1. […] (MovableType版はこちら) […]

タイトルとURLをコピーしました