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