cronで、MySQLの全テーブルを世代バックアップ
2011年10月11日MySQLを利用していて、世代別にバックアップしておきたい要件があったので、作成。
参考にしたサイトは忘れちゃいましたが・・・。
以下を、cronで実行して運用してます。
[php]
<?php
/**
* ————————————————————
* Script for MySQL Backup(cron)
* ————————————————————
* $id$
* Author $Author$
* Date $Date$
* Rev $Rev$
* URL $URL$
* ————————————————————
* MySQLのDB内全てのデータベースをバックアップ
* バックアップするデータベースへは、スーパーユーザー(root)
* でアクセス
* バックアップデータはアーカイバの指定可能
* 古い(指定日経過後)バックアップファイルは、保存指定の世代数
* を超えると自動的に古いデータから削除
**/
/* SETTINGS ————————————————- */
// MySQL rootユーザーパスワード
$RootPass = ‘password;
// バックアップ先(最後にスラッシュ必須)
$BackPath = “/home/.backup/.mysql/”;
// 世代保存日数
$KeepDay = 14;
// アーカイブコマンド
$Arc = “/bin/tar zcfp”;
// アーカイブ拡張子
$ToExt = “tgz”;
// アーカイバ
$Dumper = “/usr/bin/mysqldump”;
/* ————————————————- SETTINGS */
/* フォルダ書き込み確認 */
if ( !touch($BackPath) ){
if( !is_dir($BackPath) ){
ErrorOut(“フォルダがありません: $BackPath”);
}else{
ErrorOut(“書き込み権限がありません: $BackPath”);
}
}
~~~~
/* 保存先フォルダへ移動 */
chdir($BackPath);
/* 出力バッファ内データ出力 */
@ob_end_flush();
/* DB接続 */
if ( !($conn = @mysql_connect(‘localhost’, ‘root’, $RootPass)) )
ErrorOut(“MySQL接続エラー: サービス停止 or 接続情報が一致しません”);
// データベースの一覧を取得 -> $db[]
$rs = @mysql_list_dbs($conn);
$db = array();
for ($i = 0; $i < mysql_num_rows($rs); $i++) {
$db[count($db)] = mysql_tablename($rs, $i);
}
// mysqldumpと$Arcを実行
$now = date(‘Ymd’);
for ($i = 0; $i < count($db); $i++) {
$cmd = “$Dumper {$db[$i]} -uroot -p$RootPass –opt -r$BackPath{$db[$i]}.mydump”;
if (MySystem($cmd)) ErrorOut(“次のコマンド実行でエラーになりました。$cmd”);
$cmd = “$Arc $BackPath{$db[$i]}.$now.$ToExt {$db[$i]}.mydump”;
if (MySystem($cmd)) ErrorOut(“次のコマンド実行でエラーになりました。$cmd”);
@unlink(“$BackPath{$db[$i]}.mydump”);
};
// 古いバックアップファイルを削除
$KillDate = (int)date(‘Ymd’, mktime(0,0,0, date(‘m’), date(‘d’) – $KeepDay, date(‘Y’)));
$dir = opendir($BackPath);
while ($fname = readdir($dir)) {
$ex = explode(‘.’, $fname);
if (count($ex) == 3) {
if ((int)$ex[1] < $KillDate)
@unlink($BackPath. “/” . $fname);
}
}
closedir($dir);
//{{{ function ErrorOut()
/**
* エラー時の処理。実際の運用では管理者へメールを送信するなどに変える
* @param string $msg
* @access public
**/
function ErrorOut($msg) {
echo $msg . “\n”;
exit;
}
//}}}
//{{{ function MySystem()
/**
* コマンドの実行
* @param string $cmd
* @access public
**/
function MySystem($cmd) {
return system($cmd);
}
//}}}
?>
[/php]