WordPress等のDB(MySQL)をバックアップするPHP書いてみた。
複数のDBに対応しており、バックアップ後はzipファイルに圧縮される。
処理には2つのディレクトリが必要で、1つはバックアップファイル格納用、もうひとつは作業用
”作業用ディレクトリは実行時にすべてのファイルが削除される”ので専用のディレクトリを用意すること。
処理内容は
1.一時保管場所ファイル全削除
2.DBバックアップ(登録してるDB分ループ処理)
3.2でバックアップしたファイルをzipファイルにする
4.一時保管場所ファイル全削除
以上
ソースコードは以下
※プログラム使用は自己責任でお願いします。
<?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);
?>


コメント