webcode-labサイトロゴ

  • お問い合わせへのリンクバナー

Webcode Laboratory
for website coding & program & seo;

Topics

この Blog CMS について
定期的に自動で!(1)WEBサイトデータ丸ごと自動バックアップ方法サンプル【PHP】自前でWEBデータをサーバーにBACKUP保存 eyecatch画像

定期的に自動で!(1)WEBサイトデータ丸ごと自動バックアップ方法サンプル【PHP】自前でWEBデータをサーバーにBACKUP保存

rss

WEBサイトを〇日前に戻したい!


過去〇日分のWEBサイトデータのまるごとバックアップを取っておくんだった!あせあせangry な事態はプログラマでなくとも経験があるかと思います。

WEBサイトのHTML・CSS・画像等ファイルデータや、データベースのデータを、
変更前に戻したい、複数人作業で上書きしてしまった、改修中に壊れてしまった、クライアント側で間違って削除してしまった、WP等のバージョンアップを戻したい、数日前の状態に戻せ指令が出た、ウイルスに感染した、、、
などなどの理由で、過去のデータに戻したいことありますよね。

GitHubなどで管理していて過去データに戻せれば問題ないこともありますが、
バックアップデータを管理していない場合や、データベースがWEB上で日々更新される場合に、
WEBサイト・データベースの、両方のWEBバックアップをサーバーに日々取っておくと、いざという時にとっても便利な事態がよくあります。

レンタルサーバー会社によっては、過去のデータのバックアップを一定期間保存し、申し込めば有償で提供してくれるところがありますが、
自身で、WEBサイトデータまるごとのバックアップを、毎日など定期的なタイミングでサーバーへ保存しておけば、いざという時に困った事態でもすぐに無料で取り出せます。
といっても手動で日々保存するなんてありえないって時の、そして後から後悔しない、自動保存方法のご紹介です。

WEBサイトのファイルデータ(HTML・CSS・JS・画像等)と、データベースとに、自動保存プログラムを分けて説明します。

 




今回は1回目「(1)WEBサイトファイルデータを、サーバーへ自動でBACKUP保存する方法【PHP】」のサンプルコードです。
2回目は「(2)データベースSQLデータを、サーバーへ自動でBACKUP保存する方法【PHP Mysql】」、
3回目は「(3)サーバー側 Cronの設定方法 」をご紹介します。



 

(1)WEBサイトファイルデータを、自動でBACKUP保存する方法【PHP】


WEBサイト全体のファイルデータ(HTML・CSS・JS・画像等)を、圧縮してサーバー上に保存する方法です。
Cronで自動的に毎日保存させたり、週一度保存させたり、とタイミングは好きに自由に設定します。
永遠にバックアップを取り続けるとサーバー容量を圧迫するので、一定期間を過ぎた古いデータファイルは削除する処理も加えます。

方法の概要は、

cronで設定した指定のタイミングで、データ保存を実行するPHPプログラムファイルを発動(cron設定)

WEBサイト・DBデータを圧縮保存する(PHPプログラム、systemコマンドで実行)

同時に、一定期間以上の古いファイルは削除する(PHPプログラム、systemコマンドで実行)

という構成です。
というわけで、cronを使用できることもサーバー必要条件になります。

また、今回はレンタルサーバー、「xserver」の「PHP7.0」環境を例にしたご紹介となります。(コマンドの書き方など)
別サーバーの場合、適宜コマンドを書き換えてください。

 

BACKUPイメージ


 

 
バックアップを保管するディレクトリ・実行PHPを置くディレクトリの作成

今回は、下記のような階層構造とします。

※ 例では実行プログラム/バックアップデータ保管場所を、ルート上位に作成していますが、どこでも好きな場所に作成してください。
 ただし、「バックアップデータ保管ディレクトリ」を含めてバックアップし続けると、
 バックアップ容量がどんどん増加していきます。
 下記、「指定ディレクトリを除いてバックアップする方法」を参考に、
 「バックアップデータ保管ディレクトリ」を除いてバックアップするよう、注意してください。

今回例では、WEBサイトデータは、
  web_bkup_2018_05_01_03_00.tar.gz
のような圧縮ファイル保存形式となります。

│(root上位)
├  backup/
│ ├ web_backup.php … 「Webサイト」バックアップ実行PHP
│   ├ database_backup.php … 「Mysql」バックアップ実行PHP
│   └ backup_data/バックアップデータ保管ディレクトリ
│ 
└  root(public_html)/ … この階層以下のディレクトリ・ファイルが全てバックアップされる
    │
    │
  WEBサイトのディレクトリ・ファイル

 


WEBサイトデータ保存 PHPプログラム サンプルコード(web_backup.php)

ルート直下の「_backup_php」ディレクトリ内にこの実行ファイルをUPします。 

<?php
# ==================================================
# WEBデータ(ファイルデータ)全体をバックアップ
# ==================================================
# --------------------------------------
#  CONFIG
# --------------------------------------
# 保管期間指定 ※バックアップファイルを何日前の分まで残しておくか
$period_day = '60'; // 単位は日

# 出力ファイル名を指定 (※圧縮ファイル名 今回はファイル名で日付がわかるよう出力日をファイル名にしています。)
$backup_filename = "web_".date('Y_m_d_H_i').".tar.gz";

# 出力先ディレクトリのパスを指定(バックアップファイルを保存するディレクトリまでのフルパスか相対パス)
$backup_dir = '/home/サーバーID/独自ドメイン名/backup/backup_data/'; // フルパス指定
もしくは相対パスで、
$backup_dir = 'backup_data/';

# バックアップを取りたいディレクトリのパスを指定(この階層以下のフォルダ・ファイルが全てバックアップ保存されます)
$target_dir = '/home/サーバーID/独自ドメイン名/public_html/'; // フルパス指定
もしくは相対パスで、
$target_dir = '../public_html/';

# --------------------------------------
# CONFIG END
# --------------------------------------



# --------------------------------------
#  BACKUP 実行
# --------------------------------------
# 必要であればフォルダのパーミッション適宜変更
system( "chmod 705 ".$backup_dir);
# BACKUP 実行
system( "tar -zcvf ".$backup_dir.$backup_filename." -C / ".$target_dir ); // ※xserverの場合

# --------------------------------------
#  保管期間より過去のファイル削除 実行
# --------------------------------------
system( "find ".$backup_dir." -type f -daystart -mtime +".$period_day." | xargs rm -rv {} \ " );

# 必要であればフォルダのパーミッションを元に戻す

 

※保管する期間(過去何日まで保管するのか)は、サーバー容量を超えないよう、サイトデータのサイズ(容量)も念頭に、調整してください。




【+オプション】指定ディレクトリを除いてバックアップする方法

バックアップから除外したいディレクトリがある場合、
上記②の「BACKUP実行」の末尾に「指定ディレクトリを除くコード」を追加します。


「--exclude」で、除外ディレクトリを指定します。

" --exclude 除外したいディレクトリのパス"

例えば、ルート直下の「backup」ディレクトリの下層「exsample」ディレクトリを除いてBACKUP実行する場合、
下記のように指定します。


# --------------------------------------
#  BACKUP 実行
# --------------------------------------
# BACKUP実行 [+オプション] 指定ディレクトリを除いてBACKUP実行!
ystem( "tar -zcvf ".$backup_dir.$backup_filename." -C / ".$target_dir." --exclude backup/exsample" );



 
 

日々のバックアップが取れていると、制作する上での安心感が格段に違います。
どのプログラムやHTML・CSS・JS等の変更で、エラーが出たりおかしな結果になってしまったのか見当がつかない!
なんてことで1日、下手すると数日費やすこともままあります。
無駄な時間を省いて、安心して作業するためにも、日々のバックアップをとっておくと心強いこと間違いなしです。

 
 

PHP実行ファイルの作成は以上です。
後は、毎日どこかのタイミングで自動的に実行ファイルを動かす必要があります。
次々回の「サーバー側 Cron設定」を組み合わせて、自動保存が完成です。



次回記事 ―「(2)データベースSQLデータを、サーバーへ自動でBACKUP保存する方法【PHP Mysql】
次々回記事 ―「(3)サーバー側 Cron設定方法 

 
ページの先頭へ

rss