(33) 【WORDPRESS】プラグインでWORDPRESSを完全バックアップ

投稿者: | 2017年9月1日

この記事は最終更新から 420日 が経過しています。

コツコツとWORDPRESS上に記事を書いていて心配になること、それは
「もしデータが消えてしまったらどうしよう…」
ということ。

データベースに格納されているデータはもちろんのこと、アップロードした画像や、自作ディレクトリにFTPでアップロードした諸々のファイルたちが消えたらとっても困ります。

やりたいこと

対象1: データベース
対象2: WORDPRESS設置ディレクトリ配下の全ファイル

完全バックアップしたい と考えました。

WORDPRESSのデータをバックアップするプラグインを探しましたが、高機能な物ばかりでどれを使おうか迷ってしまう…
そこで、自分の求めるピッタリサイズのプラグインを自作することにしました。

プログラム

WORDPRESSのコーディングマナーに従っているのかどうか甚だ心配ではありますが、以下のプログラムでやりたいことが実現できました。

※WORDPRESS, PHPが Linux 上で動いていることを前提に書いています。

backup_all.php

<?php
/*
Plugin Name:  Backup All
*/
if (class_exists('BackupAll')) {
  $obj = new BackupAll();
}
class BackupAll {
  private $m_filename_prefix;
  public function __construct() {
    $this->m_filename_prefix = 'wordpress_backupall_';
    add_action('admin_menu',   array($this,'proc_add_menu'));
  }
  public function proc_add_menu() {
    add_submenu_page('options-general.php', 'BackupAll Settings', 'BackupAll', 'administrator', __FILE__, array($this,'proc_display_setting_page'));
  }
  public function execute_backup_db( &$o_dump_file_db_url ){
    $ret = FALSE;
    $cmd = "rm ".ABSPATH.$this->m_filename_prefix."DB_mysql_*";
    exec($cmd, $resp, $code);
    $fname_body = strftime($this->m_filename_prefix."DB_mysql_%Y%m%d%H%M", time());
    $fpath_sql = ABSPATH.$fname_body.".sql";
    $fpath_zip = ABSPATH.$fname_body.".zip";
    $cmd = "/usr/local/mysql/bin/mysqldump ".DB_NAME." --host=".DB_HOST." -u ".DB_USER." --password=".DB_PASSWORD." -e > {$fpath_sql}; zip {$fpath_zip} {$fpath_sql}; rm {$fpath_sql}";
    exec($cmd, $resp, $code);
    $o_dump_file_db_url = home_url($fname_body.".zip");
    $ret = TRUE;
tagEND:
    return $ret;
  }
  public function execute_backup_file( &$o_dump_file_files_url ){
    $ret = FALSE;
    $cmd = "rm ".ABSPATH.$this->m_filename_prefix."files_*";
    exec($cmd, $resp, $code);
    $fname = strftime($this->m_filename_prefix."files_%Y%m%d%H%M.zip", time());
    $fpath = ABSPATH.$fname;
    $cmd = "zip {$fpath} -r ".ABSPATH;
    exec($cmd, $resp, $code);
    $o_dump_file_files_url = home_url($fname);
    $ret = TRUE;
tagEND:
    return $ret;
  }
  public function proc_display_setting_page(){
    $html_download = "";
    // execute backup?
    if(TRUE === isset($_POST['ytmr_exec_backup'])){
      $this->execute_backup_db($dump_file_db_url);
      $link_to_dump_file = "<p><a href='{$dump_file_db_url}'>".basename($dump_file_db_url)."</a></p>";
      if($_POST['ytmr_exec_backup'] == 2){
        $this->execute_backup_file($dump_file_files_url);
        $link_to_dump_file = "<p><a href='{$dump_file_files_url}'>".basename($dump_file_files_url)."</a></p>";
      }
$html_download .= <<< EOM
<div>
  <div style="padding:0.5rem;background-color:#fff;border:2px #00f solid;line-height:1.2">
<p style="font-size:1.2rem">Download and save backup files below.</p>
{$link_to_dump_file}
  </div>
</div>
EOM;
    }
echo <<< EOM
<div class="wrap">
{$html_download}
<h2>Backup this wordpress ALL (Linux only)</h2>
<form id="BackupAll" method="post" action="{$_SERVER['REQUEST_URI']}">
  <p><label><input type="radio" name="ytmr_exec_backup" value="1" />backup database only</label></p>
  <p><label><input type="radio" name="ytmr_exec_backup" value="2" checked />backup database and all files</label></p>
EOM;
    submit_button('Execute Backup');
echo <<< EOM
</form>
</div>
EOM;
  }
}   // end of class
?>

使い方

(1) プラグインファイル作成

上記のプログラムをテキストファイル(文字コード UTF-8)backup_all.php として保存します。
作成したテキストファイルを backup_all.zip に圧縮します。

(2) プラグインのインストール

WORDPRESSの管理画面で [プラグイン]-[新規追加]メニューを選択し、(1)で作成したZIPファイルをアップロードします。
プラグインがインストール出来たら「有効化」します。

(3) バックアップを実行

管理画面で [設定]-[BackupAll]メニューを選択します。
バックアップ対象「DBのみ」or「DBと全ファイル」のどちらかを選択し、[実行]ボタンを押下します。

バックアップが完了するとダウンロードリンクが出現しますので、これをクリックしてファイルをダウンロードします。

ダウンロードしたファイルはバックアップ用HDDなどに入れて大切に保管しておきます。

※作成したバックアップファイルを削除するUIは未実装です。バックアップ実行時に古いファイルを自動削除していますので、どんどんバックアップファイルが肥大化していくことはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)