とある案件の開発作業で、ターミナルが使えないサーバ上のデータベース(MySQL)のバックアップを取る必要が生じたので書いてみた。
PHPが動作するサーバにこのスクリプトを仕込んで、ブラウザからURLを叩けば、指定場所にダンプファイルが作られるという算段。
動作確認はFreeBSDの8.xか9.x。変なことはしていないのでだいたいのレンサバ環境では動くと思う。
バックアップは、mysqldumpコマンドを使い、コマンドが見つからない時は「見つからん」的なメッセージを表示して終了。
バックアップの書き出し先パスは、Webサーバの実行ユーザが書き込みできる状態じゃないとエラーになるので注意。
(エラーの処理は割愛しているので何も起きません)
リダイレクト(「” > “. $dumpfile;」と書いてあるところ)を端折れば、バックアップの内容をブラウザ上に表示できる。
<?php
$dump = exec("which mysqldump");
if (strlen($dump) == 0) {
exit("command not found");
}
$host = "ホスト名";
$user = "MySQLのユーザ名";
$password = "MySQLのパスワード";
$db = "バックアップを行うデータベース名";
$dumpfile = "バックアップを書き出すファイルパス(パーミッションに注意)";
$cmd = $dump.
" --host=". $host. " --user=". $user. " --password=". $password. " ". $db.
" > ". $dumpfile;
system($cmd);
?>