webcode-labサイトロゴ

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

Webcode Laboratory
for website coding & program & seo;

Topics

この Blog CMS について
定期的に自動で!(2)データベース自動サーバーバックアップ方法サンプル【PHP Mysql】自前でデータベースSQLデータをサーバー保存 eyecatch画像

定期的に自動で!(2)データベース自動サーバーバックアップ方法サンプル【PHP Mysql】自前でデータベースSQLデータをサーバー保存

rss

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


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

自身で、WEBデータをまるごと、毎日など定期的タイミングでサーバーへ自動保存しておけば、いざという時に困った事態でもすぐにバックアップデータから無料で(レンタルサーバー会社はほとんど有料)取り出せます。

WEBサイトのファイルデータ(HTML・CSS・JS・画像等)と、データベースとに、自動保存プログラムを分けて説明します。
前回の記事で、WEBサイトファイルデータの自動保存方法(PHPサンプルコード)をご紹介しました。
(前回1回目「 (1)WEBサイトファイルデータを、自動でサーバーBACKUP保存する方法【PHP】」)

今回は、「 (2)データベースSQLデータを、自動でサーバーへBACKUP保存する方法【PHP Mysql】」のサンプルコードです。
レンタルサーバーのバックアップ機能がなくても自動保存可能です。(cronとコマンドが使用可能な場合)
3回目は「(3)サーバー側 Cronの設定方法 」をご紹介します。



 

(2)データベースSQLデータを、自動でBACKUP保存する方法【PHP Mysql】


DBデータを圧縮してサーバー上に保存する、PHPプログラム部分です。
Cronで自動的に毎日保存させたり、週一度保存させたり、とタイミングは好きに自由に設定します。
永遠にバックアップを取り続けるとサーバー容量を圧迫するので、一定期間を過ぎた古いデータファイルは削除する処理も加えます。

方法の概要としては、

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

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

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

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

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

BACKUPイメージ


 

 
バックアップを保管するフォルダ・実行PHPフォルダの作成

今回は、下記のような階層構造とします。
※ 実行プログラムファイル/バックアップデータ保管場所を、ルート上位に作成していますが、どこでも好きな場所に作成してください。
今回例では、データベースデータは、
  db_bkup_2018_05_01_04_00.sql.gz
のような圧縮ファイル保存形式となります。

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

 
データベースDBデータ保存 PHPプログラムファイル サンプルコード(database_backup.php)

 ルート直下の「_backup_php」ディレクトリ内にUPします。 

<?php
# ==================================================
# DBデータ(データベースデータ)をバックアップ
# ==================================================

# --------------------------------------
#  データベース情報設定
# --------------------------------------
define("DEF_dbsv", 'host'); // データベースのホスト名
define("DEF_dbname", 'database'); // データベース名
define("DEF_dbuser", 'user'); // データベースのユーザ名
define("DEF_dbpasswd", 'password'); // データベースのパスワード

# --------------------------------------
#  CONFIG
# --------------------------------------
# 保管期間指定 ※バックアップファイルを何日分残しておくか
$period_day = '60'; // 単位は日

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

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

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

# 出力ファイルパス
$backup_filepath = $backup_dirpath.$backup_filename;



# --------------------------------------
#  BACKUP 実行
# --------------------------------------
# 必要であればフォルダのパーミッション適宜変更
system( "chmod 705 ".$backup_dirpath);
# BACKUP 実行
system( "mysqldump --default-character-set=utf8 ".DEF_dbname." --host=".DEF_dbsv." --user=".DEF_dbuser." --password=".DEF_dbpasswd." > ".$backup_filepath );
// ※「xserver」の場合

// 例えば「minibird」の場合
// system( "$MYSQLPATH/mysqldump --default-character-set=utf8 --host=\"$DBHOST\" --user=\"$DBUSER\" --password=\"$DBPASS\"  \"$DBNAME\"  > \"$backup_filepath\"" );


# --------------------------------------
#  必要であれば BACKしたファイルをgzipで圧縮 実行
# --------------------------------------
system( "gzip \"$backup_filepath\"" );


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


# --------------------------------------
#  保管期間より過去のファイル削除 実行 -- 上記systemコマンドを使用しない別バージョン --
# --------------------------------------
// $rmTime = time() - 60*60*24*$period_day; // 保管期間日時の時間を求める

// $checkfiles = $backup_dirpath.'*'; // 全てのバックアップgzipファイルをチェックする

// foreach (glob($checkfiles) as $filename)
// {
//     // 指定日より前のファイルなら
//     if( filemtime($filename) < $rmTime )
//     {
//         // 削除実行
//         unlink($filename);
//     }
// }


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


次回の「Cron設定」を組み合わせて、自動保存が完成です。


前回の記事 ―「 (1)WEBサイトファイルデータを、自動でサーバーへBACKUP保存する方法【PHP】
次回の記事 ―「 (3)サーバー側 Cronの設定方法 」
 
 
ページの先頭へ

rss