WordPressバックアップ

WordPressのDBおよびファイルをバックアップするプログラムをPHPで作成した。

このプログラムはひとつのサーバーに複数のWordPressがあっても、一度にバックアップできます。

一度に作成されるファイルは
MySQLバックアップファイル1つ(複数WordPressのDBがひとつにまとめられる)
ファイルのバックアップは各WordPress毎に1つずつ

2つのWordPressをバックアップするとこんな感じのファイルが作成される
 20160125_0308_db.zip
 20160125_0308_file_site-a.com.zip
 20160125_0308_file_site-b.com.zip

ファイル名は
1. YYYYMMDD_HHMM_db.zip
  ※この中に各DBのsqlファイルが格納される
2. YYYYMMDD_HHMM_file_バックアップディレクトリ名.zip
  ※各WordPress毎にzipファイルが作成される

なお、このプログラムにはエラー処理が記述されてません。利用される方は自己責任でお願いします。
プログラムの実行はcronで行うとよいでしょう。

<?php
//==============================================================================
// WordPressバックアップ
//==============================================================================

// このプログラムは、2つのWordPressをバックアップする例です

//------------------------------------------------
// バックアップDB設定
//------------------------------------------------
$dblist	= array(
		array(
				'host' => 'localhost',
				'user' => 'user1',
				'pass' => 'pass1',
				'dbname' => 'db1'
		),
		array(
				'host' => 'localhost',
				'user' => 'user2',
				'pass' => 'pass2',
				'dbname' => 'db2'
		),
);

//------------------------------------------------
// バックアップディレクトリ設定
// フルパスで記述する
// 最後の"/"を忘れずに!
//------------------------------------------------
$dirlist	= array(
			'/xxxx/public_html/site-a.com/',
			'/xxxx/public_html/site-b.com/',
);

//------------------------------------------------
// バックアップ保存先設定
// フルパスで記述する
// 最後の"/"を忘れずに!
//------------------------------------------------
$backupPath	= "/xxxx/backup/";

//------------------------------------------------
// 一時保存先設定
// フルパスで記述する
// 最後の"/"を忘れずに!
// 【注意・重要】ここで設定した一時保存先の内容はすべて削除されます!!
//------------------------------------------------
$tempDir	= "/xxxx/backup/dbwork/";

//==============================================================================
// ↑↑↑ここまで設定↑↑↑
//==============================================================================



//==============================================================================
// DBバックアップ処理
//==============================================================================

//------------------------------------------------------------------------------
// 指定ディレクトリ内のファイルをすべて削除
//------------------------------------------------------------------------------
function Delete_File($p_target_dir)
{
	if(!($dir = @opendir($p_target_dir))){
		return;
	}
	while($file = readdir($dir)){
		if(!is_dir($file)){
			$name	= $p_target_dir . $file;
			if(file_exists($name)){
				unlink($name);
			}
		}
	}
	closedir($dir);
	return;
}

//------------------------------------------------
// 不要ファイル削除
//------------------------------------------------
Delete_File($tempDir);

//------------------------------------------------
// ファイル名(日時部作成)
//------------------------------------------------
$datetime	= date('Ymd').'_'.date('Hi');

//------------------------------------------------
// DBバックアップ
//------------------------------------------------
$dbcount	= count($dblist);
for($i=0; $i<$dbcount; $i++){

	// 一時保存先設定フルパス作成
	$backupFileFullPath	= $tempDir.$datetime.'_'.$dblist[$i]['dbname'].".sql";

	$command =
		"mysqldump --single-transaction".
		" -u ".$dblist[$i]['user'].
		" -p ".$dblist[$i]['dbname'].
		" -h ".$dblist[$i]['host'].
		" -p".$dblist[$i]['pass'].
		" > ".$backupFileFullPath;
	system($command);
}

//------------------------------------------------
// zipファイル作成
//------------------------------------------------
$command = 'cd '.$tempDir.'; zip '.$backupPath.$datetime.'_db.zip'.' -r .';
exec($command);

//------------------------------------------------
// 不要ファイル削除
//------------------------------------------------
Delete_File($tempDir);


//==============================================================================
// ファイルバックアップ処理
//==============================================================================

$dircount	= count($dirlist);
for($i=0; $i<$dircount; $i++){
	$dirname	= basename($dirlist[$i]);
	$backupFileFullPath	= $backupPath.$datetime.'_file_'.$dirname.'.zip';

	$command = 'cd '.$dirlist[$i].'; zip '.$backupFileFullPath.' -r .';
	exec($command);
}