WordPress等のDB(MySQL)をバックアップするPHP書いてみた。
複数のDBに対応しており、バックアップ後はzipファイルに圧縮される。
処理には2つのディレクトリが必要で、1つはバックアップファイル格納用、もうひとつは作業用
”作業用ディレクトリは実行時にすべてのファイルが削除される”ので専用のディレクトリを用意すること。
処理内容は
1.一時保管場所ファイル全削除
2.DBバックアップ(登録してるDB分ループ処理)
3.2でバックアップしたファイルをzipファイルにする
4.一時保管場所ファイル全削除
以上
ソースコードは以下
※プログラム使用は自己責任でお願いします。
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 |
<?php //============================================================================== // ↓↓↓ここから設定↓↓↓ //============================================================================== //------------------------------------------------ // DB設定 //------------------------------------------------ $dblist = array( array( 'host' => 'localhost', 'user' => 'user1', 'pass' => 'pass1', 'dbname' => 'dbname1' ), // DBが1つの場合はここから削除 array( 'host' => 'localhost', 'user' => 'user2', 'pass' => 'pass2', 'dbname' => 'dbname2' ), // DBが1つの場合はここまで削除 ); //------------------------------------------------ // sqlファイルの一時保管場所(作業用) // 【注意・重要】ここで設定したディレクトリ内のファイルはすべて削除されます //------------------------------------------------ $tempDir = "/hoge/hoge/backup/dbwork/"; // フルパス //------------------------------------------------ // zipファイル保存先設定 //------------------------------------------------ $filePath = "/hoge/hoge/backup/"; // フルパス //============================================================================== // ↑↑↑ここまで設定↑↑↑ //============================================================================== //------------------------------------------------ // 指定ディレクトリ内のファイルをすべて削除 // p_target_dir :削除対象ディレクトリ //------------------------------------------------ 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); //------------------------------------------------ // ファイル名(日時部作成) //------------------------------------------------ $fileName = date('Ymd').'_'.date('His'); //------------------------------------------------ // DBバックアップ //------------------------------------------------ $dbcount = count($dblist); for($i=0; $i<$dbcount; $i++){ // 一時保存先設定フルパス作成 $fileFullPath = $tempDir.$fileName.'_'.$dblist[$i]['dbname'].".sql"; $command = "mysqldump --single-transaction". " -u ".$dblist[$i]['user']. " -p ".$dblist[$i]['dbname']. " -h ".$dblist[$i]['host']. " -p".$dblist[$i]['pass']. " > ".$fileFullPath; system($command); } //------------------------------------------------ // zipファイル作成 //------------------------------------------------ $command = 'cd '.$tempDir.'; zip '.$filePath.$fileName.'.zip'.' -r .'; exec($command); //------------------------------------------------ // 一時保管場所ファイル全削除 //------------------------------------------------ Delete_File($tempDir); ?> |
コメント