Page 1 of 1

tar.gz Komprimierung

Posted: 2004-08-03 19:50
by avs
Apache/1.3.29 (Debian GNU/Linux) PHP/4.3.3 mod_ssl/2.8.16 OpenSSL/0.9.7c mod_perl/1.29

Ein CGI Script zieht ein Datenbank-Backup und sollte es eigendlich im Format tar.gz speichern.
Das ist aber nicht möglich. Funktioniert aber bei gleicher Software auf anderen Servern.

Welche Ã?nderung muss ich ausführen damit diesen Format akzeptiert wird?

Re: tar.gz Komprimierung

Posted: 2004-08-03 19:51
by sascha
Kannst du "Das ist aber nicht möglich" evtl. noch genauer beschreiben? Fehlermeldungen, Logauszüge?

Re: tar.gz Komprimierung

Posted: 2004-08-03 19:52
by duergner
Definiere 'nicht akzeptiert'.

Re: tar.gz Komprimierung

Posted: 2004-08-03 20:06
by avs
nicht akzeptiert heißt die Backupdatei wird nicht gespeichert. Die Rechte für den Backup-Ordner sind richtig vergegen.
Das Script ist Perl und läuft ohne Fehler auf einem anderen Server.

die Einzelheiten des Servers sind hier:
http://server1932015471.serverpool.info ... tion=index

Re: tar.gz Komprimierung

Posted: 2004-08-03 20:22
by duergner
avs wrote:nicht akzeptiert heißt die Backupdatei wird nicht gespeichert. Die Rechte für den Backup-Ordner sind richtig vergegen.
Was steht denn in den Log Dateien?

Re: tar.gz Komprimierung

Posted: 2004-08-03 20:30
by captaincrunch
<glaskugel>
Der Webserver hat kein Schreibrecht ins Zielverzeichnis.
</glaskugel>

Mann mann mann, liegt's eigentlich am Wetter, oder warum sind nur noch wenige in der Lage, ein Problem exakt zu beschreiben...ganz zu schweigen von aussagekräftigen Logs...?

Re: tar.gz Komprimierung

Posted: 2004-08-03 20:34
by avs
Das ist die Log Fehlermeldung

gzip: 12345.tar: No such file or directory
gzip: 12345.tar: No such file or directory
gzip: 12345.tar: No such file or directory
gzip: 12345.tar: No such file or directory
gzip: 12345.tar: No such file or directory
gzip: 12345.tar: No such file or directory
gzip: 12345.tar: No such file or directory
gzip: 12345.tar: No such file or directory
gzip: 12345.tar: No such file or directory

Re: tar.gz Komprimierung

Posted: 2004-08-03 20:36
by chris76
Ein letzter Versuch, zeig halt mal das Script oder etwas was weiterhelfen kann. Existiert die datei ? Stimmen die Pfade? kommt die meldung beim zurücksichern?

Re: tar.gz Komprimierung

Posted: 2004-08-03 20:41
by avs
Scriptauszug


sub get_dir_size{
my $dir=shift;
my $dirsize=0;
if (-d "$dir"){
my @files;
opendir(DIR,$dir) || die "Can not open directory";
while (my $file=readdir(DIR)){
next if ($file=~/^.+$/);
push (@files,$file);
}
closedir(DIR);
foreach my $file(@files){
if(-d "$dir/$file"){
$dirsize += get_dir_size("$dir/$file");
}else{
$dirsize += (stat("$dir/$file"))[7];
}
}
}elsif(-f $dir){
return (stat("$dir"))[7];
}
return $dirsize;
}
###################
sub remove_dir{
my $dir=shift;
if (-d "$dir"){
opendir(DIR,$dir) || die "Can not open directory";
my @files;
while (my $file=readdir(DIR)){
next if ($file=~/^.+$/);
push (@files,$file);

}
closedir(DIR);
foreach my $file(@files){
if(-d "$dir/$file"){
remove_dir("$dir/$file");
}else{
unlink("$dir/$file") || die "Can not unlink file $dir/$file";
}
}
}
rmdir($dir);
}
sub create_backup{
my $name=shift;
unless (-d $glbackupdir){
mkdir($glbackupdir,0777) || die "Can not create directory $glbackupdir : $!";
}
my @tables=map{"${PREF}$_"}@backup_tables;
return if ($name=~/[^a-zA-Z0-9_-]/);
my $dirstore="$glbackupdir/$name";
remove_dir($dirstore) if (-d $dirstore);
mkdir($dirstore,0777) || die "Can not create directory $dirstore : $!";
my $path;
if($ENV{PATH_TRANSLATED}){
$path="$ENV{PATH_TRANSLATED}";
}elsif($ENV{SCRIPT_FILENAME}){
$path="$ENV{SCRIPT_FILENAME}";
}
my $delm;
$delm='/' if $path=~///;
$delm='\' if $path=~/\/;
my @path=split(//|\/,$path);
$path=join($delm, @path[0..@path-2]);
foreach $table(@tables){
my $filename="$path${delm}$glbackupdir${delm}$name${delm}$table.dmp";
open (FILE,">$filename") || die "Can not open file $filename for writing";
my $sql="SHOW fields FROM $table";
my $out=$db->prepare($sql);
$out->execute();
my @cols;
while (my @output=@{$out->fetchrow_arrayref}){
push (@cols,$output[0]);
}
print FILE join("t",@cols)."n";
my $sql="SELECT * from $table";
my $out=$db->prepare($sql);
$out->execute();
while (my %output=%{$out->fetchrow_hashref}){
@output=map{$db->quote($output{$_})}@cols;
#map{s/t/\t/g}@output;
print FILE join(", ",@output)."n";
}
close(FILE);
}
unless ($^O=~/win/i){
#Linux
chdir($glbackupdir);
`pktar -cf $name.tar $name`;
`gzip $name.tar`;
chdir("..");
remove_dir("$glbackupdir/$name");
}else{

}
}
sub LoadTableFromFile{
my($table,$file)=@_;
unless(open (FILE,$file)){
die ("Can not open file $file : $: ");
return;
}
$db->do("DELETE FROM $table");
unless($file=~/attach/){
# local $/="n";
my $cols=<FILE>;
chomp($cols);
my @cols=split(/t/,$cols);
$cols=join(", ",@cols);
while (<FILE>){
chomp;
$sql="INSERT INTO $table ($cols) VALUES ($_)";
$db->do($sql);

}
}else{
binmode(FILE);
my $buff,$data;
while (read(FILE,$buff,8*2**10)){
$data.=$buff;
}
my @lines=split(/n/,$data);
$data="";
$buff="";
my @cols=split(/t/,shift(@lines));
foreach(@lines){
$sql="INSERT INTO $table ($cols) VALUES ($_)";
$db->do($sql);
}
}
close(FILE);
}
sub print_settings_backup{
my $page = new hfparser(
DATA=>$settings_shabl,
ERROR_AFTER_INPUT=>0
);
my @tables=map{"${PREF}$_"}@backup_tables;
if ($PAR{issubmit}=1){
if ($PAR{backup}){
if($PAR{filename}=~/[^a-zA-Z0-9_-]/){
$page->set_error('filename', 'Incorrect filename');
}
if(length($PAR{filename})<4){
$page->set_error('filename', 'Must be more then 3 character');
}

unless ($page->is_error()){
create_backup($PAR{filename});
}
}
if ($PAR{'unlink'}){
my @files=$q->param("unlinkcheck");
foreach my $file(@files){
next if($file=~/[^a-zA-Z0-9_-]/);
my $filename="$glbackupdir/$file";
remove_dir($filename) if (-d $filename);
unless ($^O=~/win/i){
$filename=$filename.'.tar.gz';
unlink($filename) || die ("Can not remove file $filename $!");
}
}

}
if ($PAR{'restore'}){
if($PAR{rest}){
chdir($glbackupdir);
my $backup=$PAR{rest};
unless($^O=~/win/i){
`gunzip < $backup.tar.gz | tar xvf -` if (-f "$backup.tar.gz");
unless (-d $backup){
$page->set_error('none',"Files was not unpacked from $backup.tar.gz");
}
}
foreach my $table(@tables){
$page->set_error($table, "The file $table.dmp is not exist on backup directory $backup") unless (-f "$backup/$table.dmp");
}
unless ($page->is_error()){
$page->add_regesp("{error}",qq{<h1 class="mess">Database was restored from backup - $backup</h1>});
my $path;
if($ENV{PATH_TRANSLATED}){
$path="$ENV{PATH_TRANSLATED}";
}elsif($ENV{SCRIPT_FILENAME}){
$path="$ENV{SCRIPT_FILENAME}";
}
my $delm;
$delm='/' if $path=~///;
$delm='\' if $path=~/\/;
my @path=split(//|\/,$path);
$path=join($delm, @path[0..@path-2]);
#my $path=$ENV{SCRIPT_FILENAME};
#my @path=split(///,$path);
#$path=join("/", @path[0..@path-2]);
foreach $table(@tables){
my $filename="$path${delm}$glbackupdir${delm}$backup${delm}$table.dmp";
LoadTableFromFile($table,$filename);
}
save_config(0,"adminpwd",$CONF{adminpwd});
unless ($^O=~/win/i){
remove_dir("$backup");
}
}
chdir('..');
}
}
}
opendir(DIR,$glbackupdir);
my @backups;
while(my $file=readdir(DIR)){
next if ($file=~/^.+$/);
unless ($^O=~/win/i){
if ($file=~/(.*).tar.gz/){
push(@backups,$1);
}
}else{
if (-d "$glbackupdir/$file"){
push(@backups,$file);
}
}
}
my $BACKUP="";
foreach my $name(@backups){
my $filename="$glbackupdir/$name";
$filename=$filename.'.tar.gz' unless ($^O=~/win/i);
my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks)= stat $filename;
my $time=localtime($ctime);
if ($^O=~/win/i){
$size=get_dir_size("$glbackupdir/$name");
}
$BACKUP.=<<ALL__;
<tr class="data">
<td width="7%" align="center"><INPUT type="checkbox" name="unlinkcheck" value="$name"></td>
<td width="30%" align="center">$name</td>
<td width="6%" align="center"><INPUT type="radio" name="rest" value="$name"></td>
<td width="24%" align="center"><NOBR>$time</NOBR></td>
<td width="33%" align="center">$size</td>
</tr>
ALL__

}
$page->add_regesp('{BACKUP}',$BACKUP);
$page->SplitData("#begin#backup","#end#backup");
$page->deleteBEFORE_AFTER();
unless($BACKUP){
$page->SplitData("<!--HIDE_START-->","<!--HIDE_END-->");
$page->replaceINSIDE("");
}
#$page->add_regesp("{mess_hour}",sprintf("%4d",$PAR{messcount}/$sec*60*60));
$page->ParseData;
return $page->as_string;
}