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);
}

