php もしくは Perl でMySQLのdumpデータを取得する


データベース名、ユーザー名、パスワードはわかっているのに、SSH接続できない。

(クライアントが付き合っていたウェブ制作者と契約が切れた、連絡がつかない、など)

しかし、CMSの現状調査や移行作業のために、どうしてもMySQLのdumpデータがほしい。

そんなシチュエーションになった時に、やむを得ずphpやPerlを利用して取得したことがあったため、メモ書き程度に残しておきます。

(やってることは単純で、関数を利用してmysqldumpコマンドを叩いているだけです)

phpでMySQLのdumpデータを取得

以下のファイルを仕込んで、ブラウザからアクセス。

dump.php

<?php
$cmd = "mysqldump -u hogehoge -ppassword dbname > mysql.dump";
shell_exec($cmd);
print "dump complete";
?>

Perl でMySQLのdumpデータを取得

以下のファイルを仕込んで、ブラウザからアクセス。
アクセスするときは、CGIのパーミッションを実行可能に。

dump.cgi

#!/usr/bin/perl

$cmd = "mysqldump -u hogehoge -ppassword dbname > mysql.dump";
system($cmd);
print "Content-type:text/html\n\n";
print "dump complete";

注意

hogehogeはMySQLのユーザー名。
passwordはMySQLのパスワード。
dbnameはデータベース名。
-p と password は、空白を開けずにくっつけて記述します。

phpの shell_exec関数、Perlのsystem関数は、使い方によっては危険を伴うため、禁止しているホスティングサービスもあるでしょう。

目的を達成したら、すみやかにdumpデータ、スクリプトともに削除しておいたほうが良いです。アクセスがあるたびにdumpを取得してしまいます。

mysqldumpのオプションなどは MySQLのマニュアルを
shell_exec 関数の詳細は phpのマニュアルを
Perl の system 関数の詳細は Perlのドキュメントを
ご参照ください。