PerlでMySQLのリストア(復元)

| コメント(0) | トラックバック(0)
前回(http://www.igreks.jp/dev/2009/10/perlmysql2.html)の続きで今度はバックアップファイルのリストア。

MilkyStepでは、サーバにファイルを残さずにローカルからアップロードしてリストアさせるので、今回はその流れで。

まず事前に・・・
use CGI;
my $F = CGI->new();


------アップロード処理用ルーチン---------------------------------------------------------------------

sub upload{
 my $fH = $F->upload('filename'); ### この辺でファイルチェック処理など適宜行う
 ### アップロードされたファイルを書き込み
 my ($buffer);
 open (OUT, ">./backup/$fH") || &show::error("ファイル($fH)が書き込みできません。");
 binmode (OUT);
 while(read($fH, $buffer, 1024)){
  print OUT $buffer;
 }
 close (OUT);
 close ($fH) if ($CGI::OS ne 'UNIX'); # for Windows
 chmod (0644, "./backup/$fH");
}


----リストア用ルーチン---------------------------------------------------------------------------------

sub restore{
 my $filename = $F->upload('filename');
 ### 圧縮ファイルを展開(今回の場合はgzip)tarだったら"tar -zxvf ファイル名"とか・・
 my $rec1 = system "gzip -d ./backup/$filename";

 ##### DBのテーブルをすべて消去しておく
 my @e_tables = $dbh->tables(); ### $dbhはデータベースハンドル(詳細割愛)
 foreach(@e_tables){
  &query("DROP TABLE IF EXISTS $_"); ### SQL発行&処理実行(詳細割愛)
 }

 #### リストア実行
 my $rec2 = system "mysql --user=$dbuser --password=$dbpass dbname < ./backup/展開されたファイル名";

 #### バックアップファイルは削除
 my $rec3 = system "rm ./backup/展開されたファイル名";

 #### エラー出力
 &show::error("圧縮ファイルの展開に失敗しました。") if $rec1 != 0;
 &show::error("DBの復元に失敗しました(mysql失敗)") if $rec2 != 0;
 &show::error("バックアップファイルの削除に失敗しました") if $rec3 != 0;
}


もちろんこれも前回同様Webサーバからmysqlコマンドが発行できなきゃダメなんだけど、レンタルサーバの場合どうなんだろ?
まあ、多分大丈夫だべ!


私の場合は、
"mysql --user=$dbuser --password=$dbpass dbname < ./backup/展開されたファイル名"
をしたときに、

unknown option '--skip-character-set-client-handshake'
(そんなオプションはねーよ!)

とエラーが出た。

何じゃこりゃと思ったら、以前(http://www.igreks.jp/dev/2008/11/movabletype422.html)に設定したmy.cnfの最後の一行だった。

この部分をコメントアウトしたら成功した。

トラックバック(0)

トラックバックURL: http://www.igreks.jp/blog/mt-tb.cgi/369

コメントする