Mehrere Datenbanken in einer MySQL-Verbindung abfragen

ronin

Erfahrenes Mitglied
Hallo.


Ich werde meine Datenbank aufteilen müssen. Das soll die Vorstufe sein, die DBs auf verschiedenen Servern laufen zu lassen. Aber bisher werden die DBs auf einem Server sein und mit einer MySQL-Verbindung konnektierbar sein.
Die Frage ist aber: Wie kann ich die Datenbanken einzeln ansprechen?

Ich hatte überlegt jeder Datenbank eine Variable zuzuweisen, also so:
PHP:
$dba_1 = mysql_select_db("datenbank_1");
$dba_2 = mysql_select_db("datenbank_2");
$dba_3 = mysql_select_db("datenbank_3");

und dann bei den SQL-Abfragen die jeweilige Datenbank mitzusenden.
PHP:
$query_a = mysql_query("SQL-Gedöns", $dba_1);
später im Script
PHP:
$query_b = mysql_query("SQL-Gedöns", $dba_2);

Kann das so klappen?
Und sofern das blöd ist, was könnte dann klappen? Danke schön. :)


Viele Grüße, Ronin
 
So lange sich alle Datenbanken auf einem Datenbankserver befinden, könntest du entweder immer zwischen den Datenbanken wechseln (mysql_select_db()-Funktion) oder eine Abfrage mit Angabe der Datenbank ausführen. Das Schema dazu lautet `Datenbank`.`Tabelle`.`Spalte` (siehe auch die SELECT-Syntax).

Befinden sich die Datenbanken jedoch auf unterschiedlichen Datenbankservern, kann ich dir auch nicht weiterhelfen. Da bin ich überfragt.
 
Hallo!
Gumbo hat gesagt.:
Befinden sich die Datenbanken jedoch auf unterschiedlichen Datenbankservern, kann ich dir auch nicht weiterhelfen. Da bin ich überfragt.
Auch dass ist möglich.
In Anlehnung auf das "kürzlich" ;) erschienene Thema Auf zweite DB zugreifen, habe ich es mal getestet.

localhost: hier läuft MySQL 4.1.11 und PHP 5.0.4 (Windows 2000 SP4).
anderer-host: hier läuft MySQL 4.0.25 und PHP 5.0.4 (Eisfair 1.1.2 (Linux)).
Auf beiden Rechnern gibt es den Benutzer "test" mit dem Passwort "test".
Ebenfalls sind die Datenbanken identisch: Datenbankname "test", Tabellenname "test".
Spalten: "id" int(50) auto_increment und "inhalt" varchar(255).
Auf "localhost" gibt es 2 Einträge und auf "anderer-host" gibt es 1 Eintrag, jeweils mit verschiedenem Text.

Mit dem Code habe ich mir die Anzahl der Einträge augeben lassen.
Ergebnis: localhost = 2, anderer-host = 1.
PHP:
<?php
$connect1 = mysql_connect("localhost", "test", "test");
$connect2 = mysql_connect("anderer-host", "test", "test");
 
mysql_select_db("test", $connect1);
mysql_select_db("test", $connect2);
 
$result_table1 = mysql_query("SELECT * FROM `test`", $connect1);
$row_table1 = mysql_num_rows($result_table1);
 
$result_table2 = mysql_query("SELECT * FROM `test`", $connect2);
$row_table2 = mysql_num_rows($result_table2);
 
echo "Auf localhost gibt es ".$row_table1." Einträge.<br>";
echo "Auf anderer-host gibt es ".$row_table2." Einträge.<br>";
?>
Probleme:
1. Muss MySQL selbst externe TCP/IP Verbindungen zulassen.
2. In den Benutzerrechten von MySQL müssen den Benutzern auch Zugriffe von jedem Host (test@%) zugelassen werden (alternativ langt es auch den Zugriff von einem bestimmten Host zugelassen werden (test@hostname)).

Ersteres lässt sich über die my.cnf (als root) ändern, in dem im Abschnitt mysqld der Eintrag "skip-networking" entfernt oder auskommentiert wird.
Zweiteres lässt sich über die Benutzerverwaltung von MySQL ändern, in meinem Fall habe ich dieses mit phpMyAdmin gemacht.

Gruss Dr Dau
 
Zuletzt bearbeitet:
Klar ist das möglich, Dr Dau. Ich bin bei meiner Aussage nur davon ausgegangen, dass Daten aus beide Datenbanken innerhalb einer Abfrage benötigt werden. Und befinden sich die Datenbanken dabei auf unterschiedlichen Datenbankservern, glaube ich nicht, dass es dann noch möglich ist.
 
@Gumbo, ach so meinst Du das.
Hmm, scheint wirklich nicht zu funktionieren, weil im Query (auch mit Deinem o.g. Schema) immer nur eine Datenbankverbindung genutzt wird.
In dem Fall müsste also wohl mit Arrays gearbeitet werden..... schade eigentlich, währe bestimmt ein interessantes Thema gewesen. ;)
 
Zurück