tar.gz Komprimierung
tar.gz Komprimierung
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?
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
Kannst du "Das ist aber nicht möglich" evtl. noch genauer beschreiben? Fehlermeldungen, Logauszüge?
Re: tar.gz Komprimierung
Definiere 'nicht akzeptiert'.
Re: tar.gz Komprimierung
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
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
Was steht denn in den Log Dateien?avs wrote:nicht akzeptiert heißt die Backupdatei wird nicht gespeichert. Die Rechte für den Backup-Ordner sind richtig vergegen.
-
captaincrunch
- Userprojekt

- Posts: 7066
- Joined: 2002-10-09 14:30
- Location: Dorsten
- Contact:
Re: tar.gz Komprimierung
<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...?
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...?
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
Re: tar.gz Komprimierung
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
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
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?
Gruß Christian
BofH excuses: YOU HAVE AN I/O ERROR -> Incompetent Operator error
BofH excuses: YOU HAVE AN I/O ERROR -> Incompetent Operator error
Re: tar.gz Komprimierung
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;
}
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;
}