 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
21.12.2005, 21:13
|
#1
|
|
TP-Supporter
Registriert seit: Dec 2005
|
[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($xy, 0, 6) == "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);
$anzahl= mysql_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!
|
|
|
21.12.2005, 21:52
|
#2
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
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.
|
|
|
22.12.2005, 01:12
|
#3
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
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!
|
|
|
22.12.2005, 01:44
|
#4
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
DROP ist ok - wenn die Tabelle existiert, wird sie erst gelöscht und dann neu angelegt 
|
|
|
22.12.2005, 08:49
|
#5
|
|
TP-Veteran
Registriert seit: Feb 2002
|
Kleiner Tipp: Probier mal SHOW CREATE TABLE foo; 
__________________
class GetProfileCustomerEntityReceiverInformationReceiverAndProgrammingInforma...{
public function __construct(){ if(!$this) die(' '); } }
http://www.thedailywtf.com/
|
|
|
22.12.2005, 08:53
|
#6
|
|
TP-Supporter
Registriert seit: Dec 2005
|
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 ...
|
|
|
22.12.2005, 12:58
|
#7
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
das kannst Du nur manuell abschneiden, also statt
ENGINE=MyISAM ....
einfach
TYPE=MyISAM;
|
|
|
22.12.2005, 19:19
|
#8
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
@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!
|
|
|
22.12.2005, 19:41
|
#9
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
ich schau zuerst auf den Code- da weiss man oft schneller worum es geht 
|
|
|
22.12.2005, 19:59
|
#10
|
|
TP-Supporter
Registriert seit: Dec 2005
|
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 
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| 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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr.
|
 |