Frage

Ist es möglich, eine Quer Server Auswahlabfrage mit MySQL-Client zu schreiben. Grundsätzlich ist die Einrichtung ist wie folgt.

Server-IP-Datenbank
--------- --------
1.2.3.4 Test-
a.b.c.d Test

Ich möchte eine Abfrage schreiben, die Zeilen aus einer Tabelle in der Testdatenbank auf 1.2.3.4 und setzen Sie das Ergebnis in einer Tabelle in der Testdatenbank auf a.b.c.d
wählen wird Meine Server befinden sich Meilen voneinander entfernt, damit ich einen SSH-Tunnel eröffnet, die beiden zu verbinden.

Alle Zeiger?

War es hilfreich?

Lösung

mysqldump eine Lösung sein könnte, wie bereits erwähnt, oder Sie könnten versuchen, die SELECT ... INTO OUTFILE und anschließend LOAD DATA INFILE ... Befehle.

MySQL hat die föderierte Speicher-Engine haben die Ihnen nützlich sein könnten. Hier einige weitere Dokumentation es http: //dev.mysql .com / doc / refman / 5.0 / de / Federated-storage-engine.html ich bekenne müssen, dass ich nicht großen Erfolg damit gehabt haben, aber es könnte für Sie arbeiten.

Die dritte Lösung wäre es, die Arbeit in der Anwendung zu tun. Lesen Sie in den Ergebnissen der SELECT Abfrage Zeile für Zeile und INSERT auf die anderen Server Zeile für Zeile. Sie könnten in einigen Fragen mit Datentypen und null laufen, obwohl auf diese Weise behandeln.

Andere Tipps

Wie wäre es mit föderierten Tabellen auf einem der Server? Erstellen Sie die föderierte Tabellen basierend auf den Remote-Tabellen, die Sie in der Abfrage verwenden und führen Sie einfach Ihre Frage, als ob Ihre Datenbank alle lokalen war. Beispiel unten von MySQL-Website

Das Verfahren für die Tabellen FEDERATED ist sehr einfach. Normalerweise haben Sie zwei Server ausgeführt wird, entweder beide auf dem gleichen Host oder auf verschiedenen Rechnern. (Es ist möglich, eine föderierte Tabelle eine andere Tabelle zu verwenden, die von demselben Server verwaltet wird, obwohl es wenig Sinn, so zu tun.)

Zunächst müssen Sie eine Tabelle auf dem Remote-Server haben, die Sie mit einer föderierten Tabelle zugreifen möchten. Nehmen wir an, dass der Remote-Tabelle in der föderierten Datenbank und wird wie folgt definiert:

CREATE TABLE test_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=MyISAM 
CHARSET=latin1;

Das Beispiel verwendet eine MyISAM-Tabelle, aber die Tabelle jeden Speicher-Engine verwenden könnte.

Als Nächstes erstellen Sie eine föderierte Tabelle auf dem lokalen Server für die Remote-Tabelle zugreifen:

CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

(Vor MySQL 5.0.13, Verwendung KOMMENTAR statt CONNECTION.)

Da der MySQL-Client nur auf einem Server zu einem Zeitpunkt eine Verbindung herstellen können, ist die kurze Antwort Nein, aber es gibt immer einen Weg ...

Neuere Versionen von mysqldump unterstützen --where Parameter, die verwendet werden können, um die Daten abgeladen zu begrenzen. Das heißt, Sie haben eine Möglichkeit, eine einfache SELECT laufen (das heißt alle Spalten auf einer Tabelle) und zum Erzeugen gültigen SQL es INSERT. Anschließend können Sie die Ausgabe des solchen mysqldump Befehl für den Quellserver zu einem mysql Befehl an den Zielserver.

Sie wollen wahrscheinlich ein paar Optionen wie --no-create-info und --no-add-locks auf dem mysqldump Befehl aufzunehmen. Testen Sie es, bis der Ausgang ist genau das, was Sie wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top