Mir fallen vier mögliche Problemumgehungen für Ihr Szenario ein:
- Verwenden Sie vollständig qualifizierte Tabellennamen, wenn Sie nach extern fragen Tisch. MySQL unterstützt den
dbname.tablename
-Syntax für den Zugriff auf Tabellen außerhalb des aktuellen Datenbankbereichs. Dies erfordert, dass der aktuell verbundene Benutzer die entsprechenden Rechte hat, um aus der angeforderten Tabelle in einer anderen physischen Datenbank zu lesen. - Wenn Ihre externe Datenbank auf einem anderen MySQL-Server läuft (entweder auf demselben Rechner oder über eine Netzwerkverbindung), könnten Sie die Replikation verwenden, um ständig eine schreibgeschützte Kopie der entfernten Tabelle zu aktualisieren. Die Replikation ist nur möglich, wenn Sie zwei separate MySQL-Instanzen ausführen.
- Verwenden Sie den
FEDERATED
MySQL-Speicher-Engine virtuell importieren die Tabelle in Ihre aktuelle Datenbank. Dies hebt die Anforderung auf, dem aktuellen Benutzer Zugriffsrechte auf die zweite Datenbank zu geben, da die Anmeldeinformationen mitCREATE TABLE
angegeben werden -Anweisung bei Verwendung vonFEDERATED
Speicher-Engine. Dies funktioniert auch mit Datenbanken, die auf verschiedenen physischen Servern oder verschiedenen MySQL-Instanzen laufen. Ich denke, dass dies die leistungsschwächste Option sein wird und einige Einschränkungen - je nach Nutzungsszenario und Anforderungen mehr oder weniger wichtig. - Dies ist eine Erweiterung von Methode 1. Anstatt die vollständig qualifizierten Tabellennamen jedes Mal angeben zu müssen, wenn Sie Informationen von Ihrem externen anfordern Tabelle können Sie einfach eine Ansicht
erstellen innerhalb Ihrer aktuellen Datenbank basierend auf einem einfachen
SELECT <<columns>> FROM <<database>>.<<table>>
. Diese ähneln übrigens demFEDERATED
-method funktioniert, ist aber auf Tabellen auf derselben MySQL-Instanz beschränkt.
Ich persönlich würde Methode (4) als die nützlichste betrachten - aber die anderen könnten je nach Ihren Anforderungen auch mögliche Workarounds sein.