MySQLバックアップ

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

コメント