TP Underground Lounge 07/08
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 21.12.2005, 21:13   #1
TP-Supporter
 
Registriert seit: Dec 2005
[jacky] ist auf einem guten Weg

[PHP / MySQL] Datenbankbackup!?


Hallo,

habe folgendes Script, welches mir ein Backup von bestimmten Tabellen erstellen soll:

PHP-Code:
<?php
$tbl_array 
= array();
// .. hier dann diesese array mit verschiedenen tabellen füllen ...


for ($y 0$c count($tbl_array); $y $c$y++) {  
    
$tabelle $tbl_array[$y];

    
// Struktur der Tabelle einlesen
    
$def "";
    
$def .= "DROP TABLE IF EXISTS ".$tabelle."; \n";
    
$def .= "CREATE TABLE ".$tabelle." (\n"
    
$result3 $this->_query("SHOW FIELDS FROM ".$tabelle);
    
    while(
$row mysql_fetch_array($result3)) {
        
$def .= "    ".$row['Field']." ".$row["Type"];
        
        if (
$row["Default"] != ""
            
$def .= " DEFAULT '".$row["Default"]."'";
            
        if (
$row["Null"] != "YES"
            
$def .= " NOT NULL";
            
        if (
$row["Extra"] != ""
            
$def .= " ".$row["Extra"];
            
        
$def .= ",\n";
    }
    
    
$def ereg_replace(",\n$",""$def);
    
$result3 $this->_query("SHOW KEYS FROM ".$tabelle);
    
    while(
$row mysql_fetch_array($result3)) {
        
$kname $row["Key_name"];
        
        if((
$kname != "PRIMARY") && ($row["Non_unique"] == 0)) 
            
$kname="UNIQUE|".$kname;
        
        if(!isset(
$index[$kname]))
            
$index[$kname] = array();
            
        
$index[$kname][] = $row["Column_name"];
    }
    
    while(list(
$xy$columns) = @each($index)) {
        
$def .= ",\n";
    
        if(
trim($xy) == "PRIMARY"
            
$def .= "   PRIMARY KEY (" implode($columns", ") . ")";
    
        elseif (
substr($xy06) == "UNIQUE"
            
$def .= "   UNIQUE "substr($xy,7) ." (" implode($columns", ") . ")";
    
        else 
            
$def .= "   KEY ".$xy." (" implode($columns", ") . ")";
    }

    
$def .= "\n); \n";
     
    
// Ende Struktur Modul
    
$db = @mysql_select_db($this->conn->db); 

    
$tabelle ""$tabelle
    
    
$ergebnis=array();
    
    
$tbl_name "\n\n\n--\n-- Tabellenstruktur: `".$tabelle."`\n--\n"
    
$tbl "\n\n\n--\n-- Daten für Tabelle `".$tabelle."`\n--\n"
    
    
    
$fp fopen($file,"a+"); 
    
fwrite($fp$tbl_name.$def); 
    
fwrite($fp$tbl); 
    
fclose($fp);
                

    
$data "";
    
    if (
$tabelle ""){  
    
        
$ergebnis[] = @mysql_select_db($database,$conn_id); 
        
$result $this->_query("select * from ".$tabelle); 
        
$anzahlmysql_num_rows ($result); 
        
$spaltenzahl mysql_num_fields($result); 
        
        
        
        for (
$i=0$i $anzahl$i++) { 
        
            
$zeile=mysql_fetch_array($result); 

            
$data.="insert into ".$tabelle." ("
            
            for (
$spalte 0$spalte $spaltenzahl;$spalte++) { 
                
$feldname mysql_field_name($result$spalte); 
                
                if(
$spalte == ($spaltenzahl 1)) { 
                    
$data.= $feldname
                } 
                else { 
                    
$data.= $feldname.","
                } 
            }
            
            
$data.=") VALUES ("
            
            for (
$k=0$k $spaltenzahl$k++){ 
                if(
$k == ($spaltenzahl 1)) { 
                    
$data.="'".addslashes($zeile[$k])."'"
                } 
                else { 
                    
$data.="'".addslashes($zeile[$k])."',"
                } 
            } 
            
            
$data.= ");\n"
        } 
        
        
$data.= "\n";
    } 
    else { 
        
$ergebnis[]= $err
    } 
    
    
$fp fopen($file,"a+"); 
    
$zeit time();
    
$speed $zeit;

    for (
$i3 0$i3 count($ergebnis); $i3++){ 
        
fwrite($fp$data); 
    } 
    
fclose($fp); 
}
?>
Naja, soweit klappt es eigentlich ganz gut, nur dass die Primary Keys falsch ausgelesen werden:

Backup erstellt von dem Script:
Code:
DROP TABLE IF EXISTS um_groups; 
CREATE TABLE um_groups (
    id int(10) NOT NULL auto_increment,
    groupname varchar(120) NOT NULL,
    art varchar(20) DEFAULT 'by_user' NOT NULL,
    autogetnewright int(2) DEFAULT '-1' NOT NULL,
   PRIMARY KEY (id)
); 

DROP TABLE IF EXISTS um_groups_rights; 
CREATE TABLE um_groups_rights (
    groups_id int(10) DEFAULT '0' NOT NULL,
    rights_id int(10) DEFAULT '0' NOT NULL
); 

DROP TABLE IF EXISTS um_rights; 
CREATE TABLE um_rights (
    id int(10) NOT NULL auto_increment,
    rightname varchar(120) NOT NULL,
    php_id varchar(100) NOT NULL
); 

DROP TABLE IF EXISTS um_users; 
CREATE TABLE um_users (
    id int(10) NOT NULL auto_increment,
    username varchar(100) NOT NULL,
    password varchar(100) NOT NULL,
    icq varchar(20) NOT NULL,
    mail varchar(50) NOT NULL,
    random_id varchar(25),
    autogetnewright int(2) DEFAULT '-1' NOT NULL
); 

DROP TABLE IF EXISTS um_users_groups; 
CREATE TABLE um_users_groups (
    users_id int(10) DEFAULT '0' NOT NULL,
    groups_id int(10) DEFAULT '0' NOT NULL
); 

DROP TABLE IF EXISTS um_users_rights; 
CREATE TABLE um_users_rights (
    users_id int(10) DEFAULT '0' NOT NULL,
    rights_id int(10) DEFAULT '0' NOT NULL
);
Und hier das Backup, das von PHPMyAdmin erstellt wurde:

Code:
CREATE TABLE `asdasd` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(100) collate latin1_general_ci NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

CREATE TABLE `um_groups` (
  `id` int(10) NOT NULL auto_increment,
  `groupname` varchar(120) collate latin1_general_ci NOT NULL default '',
  `art` varchar(20) collate latin1_general_ci NOT NULL default 'by_user',
  `autogetnewright` int(2) NOT NULL default '-1',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;

CREATE TABLE `um_groups_rights` (
  `groups_id` int(10) NOT NULL default '0',
  `rights_id` int(10) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

CREATE TABLE `um_rights` (
  `id` int(10) NOT NULL auto_increment,
  `rightname` varchar(120) collate latin1_general_ci NOT NULL default '',
  `php_id` varchar(100) collate latin1_general_ci NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=14 ;

CREATE TABLE `um_users` (
  `id` int(10) NOT NULL auto_increment,
  `username` varchar(100) collate latin1_general_ci NOT NULL default '',
  `password` varchar(100) collate latin1_general_ci NOT NULL default '',
  `icq` varchar(20) collate latin1_general_ci NOT NULL default '',
  `mail` varchar(50) collate latin1_general_ci NOT NULL default '',
  `random_id` varchar(25) collate latin1_general_ci default '',
  `autogetnewright` int(2) NOT NULL default '-1',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;

CREATE TABLE `um_users_groups` (
  `users_id` int(10) NOT NULL default '0',
  `groups_id` int(10) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

CREATE TABLE `um_users_rights` (
  `users_id` int(10) NOT NULL default '0',
  `rights_id` int(10) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Irgendwie stimmt der erste Primary Key noch, aber danach werden keine mehr angelegt.

Woran liegt das bzw habt Ihr ein (kleines !) Script, welches bestimmte Tabellen backuppd (Also Struktur + Daten der Tabelle)!

Danke!
[jacky] ist offline   Mit Zitat antworten


Alt 21.12.2005, 21:52   #2
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Die Backticks sind nicht ohne Grund da - ein Feldname "name" wird ohne Backticks garnicht akzeptiert.
NOT NULL kommt immer vor dem Default-Wert.
Die TYPE / ENGINE Anweisung fehlt bei Dir komplett, da stehen u.U. noch Charset und Comment-Anweisungen.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 22.12.2005, 01:12   #3
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
Was soll denn DROP vorweg? Ist so nicht ziemlich schnell 'upgebacked'
oder ist für meinen Kopf schon zu spät??
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 22.12.2005, 01:44   #4
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
DROP ist ok - wenn die Tabelle existiert, wird sie erst gelöscht und dann neu angelegt
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 22.12.2005, 08:49   #5
TP-Veteran
 
Benutzerbild von fettmme
 
Registriert seit: Feb 2002
fettmme bringt sich richtig einfettmme bringt sich richtig ein
Kleiner Tipp: Probier mal SHOW CREATE TABLE foo;
__________________
class GetProfileCustomerEntityReceiverInformationReceiverAndProgrammingInforma...{
public function __construct(){ if(!$this) die(' '); } }
http://www.thedailywtf.com/
fettmme ist offline   Mit Zitat antworten
Alt 22.12.2005, 08:53   #6
TP-Supporter
 
Registriert seit: Dec 2005
[jacky] ist auf einem guten Weg
Zitat:
Zitat von fettmme
Kleiner Tipp: Probier mal SHOW CREATE TABLE foo;
hehe ok danke

Eine Frage dazu: Je nachdem, was ich für eine Version habe, gibt dies mir noch viele Angabe wie "collate latin1_general_ci" mit aus, die leider nicht immer kompatibel zu der Version auf meinem Server sind ...
Kann man das irgendwie abstellen, also sodass man nur das wichtigste hat ...
[jacky] ist offline   Mit Zitat antworten
Alt 22.12.2005, 12:58   #7
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
das kannst Du nur manuell abschneiden, also statt
ENGINE=MyISAM ....
einfach
TYPE=MyISAM;
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 22.12.2005, 19:19   #8
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
@St@eff.en

Ja klar, Drop ist ok, er macht ja auch create!

Habe mich irreführen lassen, dachte er erstellt aus der DB einen Save

Zitat:
Zitat von Jacky
habe folgendes Script, welches mir ein Backup von bestimmten Tabellen erstellen soll
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 22.12.2005, 19:41   #9
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
ich schau zuerst auf den Code- da weiss man oft schneller worum es geht
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 22.12.2005, 19:59   #10
TP-Supporter
 
Registriert seit: Dec 2005
[jacky] ist auf einem guten Weg
Zitat:
Zitat von St@eff.en
ich schau zuerst auf den Code- da weiss man oft schneller worum es geht
Hm, stimmt
Naja, habe es nun hinbekommen

Danke euch beiden

edit: euch 3
[jacky] ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
[PHP / MySQL] Datenbankbackup!? [PHP / MySQL] Datenbankbackup!?
« 404 htaccess und check von website | MySQL Typ bei Zahlen bzw. Währung »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39<