前回の記事(http://www.igreks.jp/dev/2009/10/perlmysql.html)のちょい発展型
前回の場合だと、処理直後は圧縮したtar.gzファイルがサーバに残ってしまうので、標準出力後にファイルを削除するように改良。
サーバにバックアップファイルを残しておきたくない場合は便利かな?
sub backup{
#### 念のためファイルが残ってたら削除
system "rm ./backup/backup_*.tar.gz";
#### 現在日時取得(詳細は割愛)
my @cur = &get::current();
my $datetime = "$cur[5]$cur[4]$cur[3]-$cur[2]$cur[1]$cur[0]";
#### ダンプと圧縮
system "mysqldump -a --opt --user=dbuser --password=$dbpass --default-character-set=binary dbname > ./backup/backup.mysql";
system "tar -czPf ./backup/backup_$datetime.tar.gz ./backup/backup.mysql";
#### ここで、Locationで飛ばさずに標準出力
print "Content-Type: application/octet-stream\n";
print "Content-Type: application/download; name=backup_$datetime.tar.gz\n";
print "Content-Disposition: attachment; filename=backup_$datetime.tar.gz\n";
print "\n";
#### 圧縮ファイルの中身書き出し
system "cat ./backup/backup_$datetime.tar.gz";
#### サーバに残らぬよう削除
system "rm ./backup/backup.mysql";
system "rm ./backup/backup_$datetime.tar.gz";
exit;
}
※catコマンド使用後は、ブラウザに出力が完了してるので削除が可能
※ヘッダー出力を system "echo ...." でやったらなぜか失敗したので、ヘッダー出力だけ普通にprintしたら成功した。失敗した理由わかるひと教えてください。
リストア方法→http://www.igreks.jp/dev/2009/10/perlmysql-1.html
前回の場合だと、処理直後は圧縮したtar.gzファイルがサーバに残ってしまうので、標準出力後にファイルを削除するように改良。
サーバにバックアップファイルを残しておきたくない場合は便利かな?
sub backup{
#### 念のためファイルが残ってたら削除
system "rm ./backup/backup_*.tar.gz";
#### 現在日時取得(詳細は割愛)
my @cur = &get::current();
my $datetime = "$cur[5]$cur[4]$cur[3]-$cur[2]$cur[1]$cur[0]";
#### ダンプと圧縮
system "mysqldump -a --opt --user=dbuser --password=$dbpass --default-character-set=binary dbname > ./backup/backup.mysql";
system "tar -czPf ./backup/backup_$datetime.tar.gz ./backup/backup.mysql";
#### ここで、Locationで飛ばさずに標準出力
print "Content-Type: application/octet-stream\n";
print "Content-Type: application/download; name=backup_$datetime.tar.gz\n";
print "Content-Disposition: attachment; filename=backup_$datetime.tar.gz\n";
print "\n";
#### 圧縮ファイルの中身書き出し
system "cat ./backup/backup_$datetime.tar.gz";
#### サーバに残らぬよう削除
system "rm ./backup/backup.mysql";
system "rm ./backup/backup_$datetime.tar.gz";
exit;
}
※catコマンド使用後は、ブラウザに出力が完了してるので削除が可能
※ヘッダー出力を system "echo ...." でやったらなぜか失敗したので、ヘッダー出力だけ普通にprintしたら成功した。失敗した理由わかるひと教えてください。
リストア方法→http://www.igreks.jp/dev/2009/10/perlmysql-1.html

コメントする