[MySQL] Daten aus 2 Datenbanken abgleichen

Posti

Mitglied
Hi

Ich habe gerade das Problem, daß ich einen Script update und nun ca. 600.000 Datensätze von der 'alten' Datenbank in die 'neue' übernehmen will.
Die beiden Datenbanken sitzen auf dem gleichen Server.

Gibt es eine Möglichkeit, wie ich aus Datenbank A die Werte auslesen kann, und in Datenbank B schreiben?

Momentan wähle ich meine Datenbank wie folgt an:
---------
$outi=@mysql_connect($dbhost, $dbuser, $dbpass);
if (!$outi){
echo "Fehler ".mysql_errno."<br>Datenbank nicht erreichbar (".mysql_error().")$outi<br>";
}else{
$outi=@mysql_select_db($dbname);
if (!$outi){
echo "Fehler ".mysql_errno."<br>Datenbank nicht anwählbar (".mysql_error().")$outi<br>";
}
}
if (!$outi){
@mysql_close();
echo "Beende Script<br>";
die();
}
---------
Nun dachte ich mir, daß ich einfach die 2. Tabelle ebenfalls so anwähle, also
$outi2=@mysql_select_db($dbname_alt);
if (!$outi2){
echo "Fehler ".mysql_errno."<br>Datenbank nicht anwählbar (".mysql_error().")$outi2<br>";
}

Nur, wie kann ich bei einer mysql_query Anfrage angeben, mit welcher Datenbank der Befehl ausgeführt werden soll?
Kann ich irgendwie die Variablen $outi bzw. $outi2 dazu verwenden, und wenn ja, wie?
Leider waren weder die Mysql-Referenz (aus PHPmyAdmin heraus) noch SelfHTML hilfreich und bei Euch bin ich zu blöde, der Suche die passenden Stichworte zu geben. (war doch hier ... oda)

Ach ja, ein einfaches einkopieren der 'alten' Datenbank scheidet aus, da in der neuen version nicht mehr alle Spalten benutzt werden, bzw neue hinzugekommen sind, weiter muß ich beim Übertragen direkt einige Werte zusammenrechnen ...

Sorry, daß es nicht umständlicher ging *schäm*

MfG
Posti
 
Hallo Posti,

Du kannst mit mysql_db_query(Datenbankname, Abfrage) eine Abfrage gezielt auf einer Datenbank ausführen...
siehe php.net

...wobei ich da grade lese, dass die Funktion deprecated ist... hm dann sollt ich des auch mal bei mir ändern :) ... aber da findest Du auch ein Beispiel, wie Du mit mysql_select_db() eine DB auswählst, auf die Du zugreifen möchtest...

vg Clemens
 
Danke Dir für die Antwort.

Wie mache ich das?
Ungefähr so:
PHP:
$read=mysql_query("SELECT * FROM readdb");
$write=mysql_query("INSERT INTO writedb ");

while($daten=mysql_fetch_array($read)){
   //Daten verarbeiten
   //Daten in Write-DB schreiben ... nur wie?
}
//Fertig

Da ich konstant aus der Read-DB lesen, und direkt danach in die Write-DB schreiben muß, glaube ich, daß die mySQL beim laufendem Wechsel irgendwann schlapp macht.
Ich muß knapp über 600.000 Datensätze umstricken.

Hättest Du dafür nen Script-Schnipsel für mich?

MfG
Posti

PS: PHP.NET nenne ich fast schon mein Zuhaus *g* ... nur ist der interessanteste Teil, die Post's unterhalb, alles nur in englisch ... nicht unbedingt meine Sprache *seufz*
 
Zuletzt bearbeitet:
Also, wenn die beiden DBs auf dem selben Server laufen, dann braucht man doch nur den DB-Namen vor den Tabellennamen schreiben. Um alle Sätze aus einer Tabelle in DB1 in eine andere Tabelle in DB2 zu kopieren, reicht eigentlich ein einziges SQL-Statement, etwa in der Art:
Code:
INSERT INTO db2.tabelle_neu (spalte1, spalte2, spalte3, ...) SELECT spalte1, spalte2, spalte_x + spalte_y, ... FROM db1.tabelle_alt WHERE ...
Hierbei ist es wurst, welche DB die aktive ist, es ist kein mysql_select_db() nötig, bzw. es ist egal, welche DB selected ist.

Martin

Edit: Ich würde allerdings erst mal den SELECT alleine ausprobieren und ausgeben (bei 600.000 Sätzen am besten mit einem LIMIT). Wenn dieser die Daten so liefert, wie Du sie in der neuen Tabelle haben willst, dann bau' das INSERT davor, schick das Statement ab und geh' nen Kaffee trinken. Ok - bei 600.000 trink' lieber noch nen zweiten. Wenn Du wieder kommst, sind die Datensätze drüben.
Übrigens: So was läuft bei uns jede Nacht mit insgesamt etwa 1.000.000 Datensätzen über 15 Tabellen in 3 Datenbanken - kein Problem für MySQL.
 
Zuletzt bearbeitet:
Coooool

Besten Dank, das werde ich doch mal ausprobieren.
Sorry, daß meine Antwort so lange auf sich hat warten lassen ... bei mir verschwinden ab und zu die Lesezeichen im Browser :-/ .... naja, nen Format könnte das Probb beheben *g*

MfG
Posti
 
Moinse

Nachdem ich meinem Space beigebracht hab, nen Restore durchzuführen (ok, ich war ungeduldig, klickte öfter auf den Button ... bestimmt 50 Restor's gemacht :-/ )
konnte ich mich der Funktion zuwenden.

HAT ASTREIN GEKLAPPT

Aber für soviele Kaffee hatte ich keine Zeit, insgesamt brauchte ich 'nur' 240 Sekunden.

Werde gleich mal nen Thread erstellen, vll kann ja noch jemand diese Funktionen gebrauchen.

Besten Dank nochmal.
Posti
 
Zurück