Kopie einer bestehenden DB inkl. Tabellen erstelle

Hallo Forum,

nach langer Zeit bin ich mal wieder mit einem neuen kleinen Problem hier.

Ausgangssituation:
Ich möchte eine Kopie einer bestehenden MySQL Datenbank inkl. aller darin enthaltenen 53 Tabellen erstellen.
Dafür habe ich ein Skript erstellt, welches es mir erlaubt diese anzulegen, die Tabellen zu übernehmen und in der neuen DB den Inhalt der kopierten Tabellen zu löschen.

Problem:
Leider werden nur 48 Tabellen übernommen.
Dann folgt folgender Fehler:
„Incorrect table name ‚abcde‘.
Mein erweiterter Fehler: Could not create Table ‚Tabellenname‘, Tabellennummer 48“

Leider finde ich den Fehler nicht. Vielleicht könnte bitte jemand mal über mein Skript schauen und mit einen Tip geben, wie ich das Problem lösen könnte.

Mein Skript mit Kommentaren zu den Schritten:

<?php include('../connect.php');<br />
if (empty($\_REQUEST['dbanlegen'])){
 $i=0;
 $server = 'localhost';
 $database = 'bestehende\_db';
 echo "Legen Sie eine neue DB an!";
} else {

$server = 'localhost';
$svbenutzer = 'root';
$svpass = '';
$database = 'bestehende\_db';

if ( ($db\_handle = mysql\_connect($server, $svbenutzer, $svpass)) === false)
{
 die(mysql\_error());
}


//Quell-Datenbank
$database\_source = 'bestehende\_db';
 
//Ziel-Datenbank
$database\_target = 'neue\_db';


//Ziel-Datenbank erstellen
$sql = "Drop database ".$database\_target;
$query = mysql\_query($sql) or die(mysql\_error());

//Ziel-Datenbank erstellen
$sql = "CREATE database ".$database\_target;
$query = mysql\_query($sql) or die(mysql\_error());
 
//Tabellen der Quell-Datenbank auslesen

$sql = "SHOW TABLES FROM ".$database\_source;
$query = mysql\_query($sql) or die(mysql\_error());
$num\_tables = mysql\_num\_rows($query);
 

//$res = mysql\_query($query1);
for($i = 0; $i \< $num\_tables; $i++) {

 $table\_name = mysql\_result($query, $i); 

 $sql = "SHOW CREATE TABLE ".$database\_source.".".$table\_name; //$table\_name;
 $sub\_query = mysql\_query($sql) or die("1. ".mysql\_error()."Table: **".$table\_name."" );  
 $sub\_query\_data\_arr = mysql\_fetch\_row($sub\_query);   
   
 //Query zur Erstellung der neuen Tabelle konstruieren  
 $sql = str\_replace("`".$table_name."`",$database\_target.".".$table\_name, $sub\_query\_data\_arr[1]);  
   
 //Tabelle in Ziel-Datenbank erstellen  
 $sub\_query = mysql\_query($sql) or die("2. ".mysql\_error()." Could not create Table ".$table\_name." ".$i."");  
   
 //Daten Einfügen  
 $sql = "INSERT INTO ".$database\_target.".".$table\_name." SELECT \* FROM ".$database\_source.".".$table\_name;  
 $sub\_query = mysql\_query($sql) or die("3. ".mysql\_error());  
  
 //Daten der neuen DB löschen  
 $sql = "delete from ".$database\_target.".".$table\_name;  
 $sub\_query = mysql\_query($sql) or die("4. ".mysql\_error());  
// $i=$i+1;  
  
}  
  
  
  
 }  
 echo "  
  
Anzahl Tabellen: ".$i;  
  
?\>  
  
  
 Datenbank Vorlage kopieren**  

Servername: Datenbankname: SV-Benutzer: SV-Passwort:

Herzlichen Dank für jegliche Tips und Hilfe.

Viele Grüße aus Köln,
Mo :smile:

Hallo User,

Ausgangssituation:
Ich möchte eine Kopie einer bestehenden MySQL Datenbank inkl.
aller darin enthaltenen 53 Tabellen erstellen.
Dafür habe ich ein Skript erstellt, welches es mir erlaubt
diese anzulegen, die Tabellen zu übernehmen und in der neuen
DB den Inhalt der kopierten Tabellen zu löschen.

  1. Warum nimmst Du dazu nicht die import und export Funktion von phpmyadmin?

$query = mysql_query($sql) or die(mysql_error());

  1. Wenn Du hier den Inhalt von $sql mit ausgibst wirst Du vielleicht schlauer… :wink:

Grüße
Munich

Problem selbst gelöst! :smile:

Hallo!

  1. Was ich nicht verstehe ist, warum du die Daten erst kopierst und dan sofort wieder löschst?

  2. Gibt es in der Tabelle die den fehler verursacht irgendwelche foreign keys?

Grüße,
Volker