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で行うとよいでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
<?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); } |