Domanda

È possibile scrivere una query di selezione tra server utilizzando MySQL Client. Fondamentalmente l'installazione è la seguente.

IP server & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Database
--------- & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; --------
1.2.3.4 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; prova
a.b.c.d & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Prova

Voglio scrivere una query che selezionerà le righe da una tabella nel Database test su 1.2.3.4 e inserirà il risultato in una tabella nel Database test su a.b.c.d
I miei server si trovano a miglia di distanza, quindi aprirò un tunnel SSH per collegare i due.

Qualche puntatore?

È stato utile?

Soluzione

mysqldump potrebbe essere una soluzione come già menzionato oppure potresti provare a utilizzare SELECT ... INTO OUTFILE e quindi LOAD DATA INFILE ... comandi.

MySQL ha il motore di archiviazione federato che potrebbe esserti utile. Ecco qualche altra documentazione su di esso http: //dev.mysql .com / doc / refman / 5.0 / it / federated-storage-engine.html Devo confessare che non ho avuto un grande successo con esso ma potrebbe funzionare per te.

La terza soluzione sarebbe quella di fare il lavoro nella tua applicazione. Leggere i risultati della query SELECT riga per riga e INSERT sull'altro server riga per riga. Tuttavia, potresti riscontrare alcuni problemi con i tipi di dati e la gestione nulla in questo modo.

Altri suggerimenti

che ne dici di usare le tabelle federate su uno dei server? crea le tabelle federate in base alle tabelle remote che utilizzerai nella query ed esegui la query come se il tuo database fosse tutto locale. esempio di seguito dal sito MySQL

La procedura per l'utilizzo delle tabelle FEDERATE è molto semplice. Normalmente, hai due server in esecuzione, entrambi sullo stesso host o su host diversi. (È possibile che una tabella FEDERATA usi un'altra tabella gestita dallo stesso server, anche se non ha molto senso farlo.)

Innanzitutto, è necessario disporre di una tabella sul server remoto a cui si desidera accedere utilizzando una tabella FEDERATA. Supponiamo che la tabella remota sia nel database federato e sia definita in questo modo:

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;

L'esempio utilizza una tabella MyISAM, ma la tabella potrebbe utilizzare qualsiasi motore di archiviazione.

Successivamente, crea una tabella FEDERATA sul server locale per accedere alla tabella remota:

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';

(Prima di MySQL 5.0.13, utilizzare COMMENT piuttosto che CONNECTION.)

Poiché il client mysql può connettersi a un solo server alla volta, la risposta breve è No. Ma c'è sempre un modo ...

Le versioni recenti di mysqldump supportano un parametro --where che può essere utilizzato per limitare i dati scaricati. Questo significa che hai un modo per eseguire un semplice SELECT (cioè tutte le colonne su una tabella) e produrre un codice SQL valido per INSERT . È quindi possibile reindirizzare l'output di tale comando mysqldump per il server di origine a un comando mysql al server di destinazione.

Probabilmente vuoi includere alcune opzioni come --no-create-info e --no-add-locks sul mysqldump comando. Provalo fino a quando l'output è esattamente quello che vuoi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top