[MySQL] Query su DB 1 e Insert su DB 2

Pietro De Rosa

Nuovo Utente
30 Ott 2017
9
0
1
34
Buongiorno a tutti,

volevo chiedere a voi esperti se vi fosse un modo per poter Eseguire una query su di un DB (chiamiamolo 1) per poi successivamente scrivere sul DB secondario (2).

Stavo provando ad eseguire questa query dal DB 2
Codice:
INSERT INTO test.prova (id_articolo,listino,prezzo)
VALUES (select LST,ART,PRZ from mydata.tab01lst where LST='1' and ART='X')

Ma ovviamente non c'è alcun riferimento, nella select, al server del DB 1; ho provato anche con SERVER.mydata.tab01lst, ma cercando in rete ho trovato che bisognerebbe linkare i due server.

Esiste un modo per ovviare a tutto ciò? Magari anche con un metodo un po' più macchinoso.

Grazie a chi risponderà
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Dovrebbe Andare
Codice:
INSERT INTO DATABASE1.TBL (CAMPO1,CAMPO2,CAMPO3)
  SELECT
    tbl_db_2.CAMPO1,
    tbl_db_2.CAMPO2,
    tbl_db_2.CAMPO3,
  FROM DATABASE2.TBL
 

Pietro De Rosa

Nuovo Utente
30 Ott 2017
9
0
1
34
Dovrebbe Andare
Codice:
INSERT INTO DATABASE1.TBL (CAMPO1,CAMPO2,CAMPO3)
  SELECT
    tbl_db_2.CAMPO1,
    tbl_db_2.CAMPO2,
    tbl_db_2.CAMPO3,
  FROM DATABASE2.TBL
Ciao Marcus,

ma sono 2 server distinti; uno è installato localmente, l'altro in cloud; eseguendo quella query dove dichiaro la distinzione dei due server?
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Scusa per la risposta errata, ma non era chiara la locazione dei server...
UP: non avevo finito di leggere....
Ma devi effettuare una query secca, o attraverso qualche script?
Potresti provare ad utilizzare una configurazione distribuita, ossia un server master e uno slave, in questo modo potrai effettuare le sync...
Se il progetto è di grandi dimensioni ne vale la pena, altrimenti opterei per un cronJob.
 

Pietro De Rosa

Nuovo Utente
30 Ott 2017
9
0
1
34
Ti spiego la mia necessità nel pratico, così puoi darmi il consiglio più adatto:

Ho un database in cloud, dove però non posso scrivere ma soltanto leggere, quindi la mia intenzione è quella di fare delle query sul db in cloud e scrivere il risultato sul db in locale, il tutto vorrei poi chiaramente schedularlo;

Essendo un db aziendale (quello in cloud) è molto ricco di informazioni e per i calcoli che faccio tramite query ogni elaborazione dura anche 1 minuto, quindi volevo schedulare questi calcoli (query) ogni 10 minuti ed automatizzare la fase di scrittura\esportazione verso il db in locale (dove poi ho agganciato una paginetta in php).

Ho provato a lavorare direttamente sul db in cloud, ma essendo pesanti le query la pagina php passa praticamente tutto il tempo a caricare il risultato e non è quello che volevo, per questo ho optato all'opzione che spiegavo, così dal nuovo db vado soltanto a "leggere i dati già elaborati".

Spero di essere stato quanto più chiaro possibile e mi scuso se così non fosse :)
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Secondo me se si tratta di una mole di dati abbastanza importante, conviene schedulare in modo appropriato un cron Job sul DB in Cloud, in questo modo sarà il server mysql del Cloud ad avere l'onere di elaborare e organizzare i risultati in una tabella da cui prelevare successivamente i valori necessari, il tutto potresti prevederlo attraverso gli Eventi di MySQL e impostargli i parametri d'esecuzione.
Se non necessiti di avere la situazione realtime dei dati sarebbe sprecata l'esecuzione dell'evento ogni 10 minuti, potresti schedulare l'evento ogni ora e attraverso un cronJob di sistema della macchina locale scheduli l'esecuzione dello script più o meno 15 minuti dopo la fine dell'esecuzione del Cloud.
Detto così sembrerebbe confusionario, ma...
Tempo T1, Tempo T2 = adesso;
L'evento della macchina in cloud viene schedulato ad intervalli T1=T1+60 quindi a cadenza oraria
La macchina locale schedula lo script T2=T1+60+30 minuti
Ossia prelevi le risorse 30 minuti dopo l'esecuzione dell'evento mysql, in questo modo dai il tempo alla macchina di elaborare, e lo script ha il tempo di scaricare i dati.
Naturalmente è impensabile scaricare tutto con una sola iterazione...

Sarebbe da prevedere un campo sulla tabella elaborata dal Clous un flag che indica se quella risorsa è già stata elabora o in alternativa un contatore che indichi l'ultima posizione utile dal quale far partire l'elaborazione, così da avere solo i nuovi dati nella tabella da scaricare...
 

Pietro De Rosa

Nuovo Utente
30 Ott 2017
9
0
1
34
Secondo me se si tratta di una mole di dati abbastanza importante, conviene schedulare in modo appropriato un cron Job sul DB in Cloud,
Marcus purtroppo uno dei problemi più limitanti che ho è proprio questo, cioè che non ho alcun accesso al server in cloud se non un utente con permessi in sola lettura del database.

Devo necessariamente optare per un sistema molto meccanico ed elementare, sempre se possibile (anche perché non saprei come fare).

Primo step: query sul db in cloud
Secondo step: esportare il risultato
Terzo step: scrivere i dati sul db in locale

E' fattibile, detto in questo modo? Se sì, come? :)
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Allora banalmente lavorando solo sul tuo DB in locale:
  1. Creai una tabella con l'ultimo indice lavorato, così da non ripescare ogni volta il tutto.
  2. Crei la tabella che ti serve, sarebbe quella che deve contenere i dati
  3. Effettui una query di selezione sulla macchina in Cloud indicando un numero massimo di elementi da estrarre
  4. Effettui l'insert all'interno della tua tabella ed esegui il codice fino alla fine degli item.
Da prevedere in ordine di priorità:
  1. Estraggo il mio indice per partire
  2. Quante righe compongo la tabella sul cloud (questo serve per avere il numero di iterazioni) attraverso una query appropriata
  3. Inzio l'iterazione
    1. Prelevo la parte di dati che mi servono (attraverso LIMIT)
    2. Inserisco nel DB locale i dati che ho ricevuto
    3. Aggiorno il mio indice con l'ultimo inserito
 

Pietro De Rosa

Nuovo Utente
30 Ott 2017
9
0
1
34
Perfetto tutto quello che mi hai scritto, hai reso benissimo l'idea.

Il problema sussiste su questi due punti (che in un certo senso erano il motivo del mio topic)
  • Effettui una query di selezione sulla macchina in Cloud indicando un numero massimo di elementi da estrarre
  • Effettui l'insert all'interno della tua tabella ed esegui il codice fino alla fine degli item.

- Come faccio a fare una query in cloud ed inserirla sul db in locale?

Io provo in questo modo:
INSERT INTO LOCAL.prova (id_articolo,listino,prezzo) VALUES (select LST,ART,PRZ from CLOUD.tab01lst where LST='1' and ART='X')

se provo a fare "INSERT INTO 192.168.1.100.LOCAL.prova [...] from 151.80.50.10.CLOUD.tab01lst", non mi funziona. Anche perché se eseguo la query da locale, ovviamente non necessito di user\password per scrivere sul db in locale, ma per lanciare la query in cloud dovrò pur indicare user e password da qualche parte. Bene, dove?
Idem al contrario.

Non so se mi spiego bene... :D
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
lo script ha il tempo di scaricare i dati.
Il presupposto è che lo script ha la logica di reperimento dei dati.
Quindi il tuo script avrà 2 connessioni, uno per la macchina in cloud, e uno per local, ossia:
PHP:
$db1=new mysqli(host_cloud,user_cloud,pass_cloud,database_cloud);
$db2=new mysqli(host_local,user_local,pass_local,database_local);

Esegui la query di select sul db1, e fai la insert sul db2!!
 

Pietro De Rosa

Nuovo Utente
30 Ott 2017
9
0
1
34
Il presupposto è che lo script ha la logica di reperimento dei dati.
Quindi il tuo script avrà 2 connessioni, uno per la macchina in cloud, e uno per local, ossia:
PHP:
$db1=new mysqli(host_cloud,user_cloud,pass_cloud,database_cloud);
$db2=new mysqli(host_local,user_local,pass_local,database_local);

Esegui la query di select sul db1, e fai la insert sul db2!!
Grazie mille per tutto il tuo tempo :)

Ti ho scritto un pm
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
hai provato a seguire questo esempio ?

https://winashwin.wordpress.com/2012/08/22/mysql-federated-table/

il link suggerisce come creare una tabella locale che è federata alla tabella remota e quindi lavorare in locale con un unico database, ma accedendo alla remota avendo descritto nella tabella locale le informazioni di connessione

potresti provare la semplice lettura e, se funziona potresti tornare alla insert-select

guarda anche il manuale
https://dev.mysql.com/doc/refman/5.5/en/federated-storage-engine.html
 
Discussioni simili
Autore Titolo Forum Risposte Data
G Inserimento loop in una INSERT query in PHP e MySQL PHP 2
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
A Carattere 'è' in query MySQL PHP 0
M [MySQL] CREARE UN LINK SU UN DETERMINATO CAMPO DI UNA TABELLA RISULTATO DI UNA QUERY SQL MySQL 3
max1974 Query lenta.....Mysql 5.7 MySQL 2
G [MySQL] Connessione DB e query da file batch MySQL 1
V [MySQL] problema query con date su server MySQL 5
P Query Mysql con Join PHP 2
D [MySQL] Tabelle "molti a molti", SELECT con troppe QUERY MySQL 7
G esportare in file .csv risultato di query mysql PHP 5
napuleone [MySQL] commenti in una query MySQL 1
MarcoGrazia [mysql][mariadb]Raggruppare query in base alla data MySQL 2
G Mysql ( Query) problema interrogazione MySQL 0
danjde [MySQL] Escludere specifico valore dalla query select MySQL 3
C Php/Mysql query JOIN tra tabelle PHP 4
C Php/Mysql query JOIN tra due tabelle PHP 18
P [MYSQL] Query su tabelle con clausola "essenziale" MySQL 10
booklisa MYSQL e PHP Query e sottoquery PHP 3
A Query mssql su mysql con linked server Database 0
I Query DB MYSQL MySQL 0
T query mysql MySQL 3
gandalf1959 mysql query, sum(qualcosa), order by sum(qualcosa). E' possibile? PHP 14
M Query mysql per selezioni random in categorie mirate PHP 4
M [PHP - MYSQL] Mantenere filtro query in tabelle paginate PHP 3
M Paginazione di risultati query mysql PHP 2
G problema query mysql in php PHP 5
felino [PHP][MySQL] Errore nella query PHP 6
A Form fattura multiriga e query salvataggio mysql PHP 3
N Eseguire una query MySQL dopo 10 secondi PHP 0
A jbutton che esegue una query mysql in netbeans Java 1
IImanuII mysql query random riga PHP 5
L filtri di query [php-mysql] PHP 6
A [RISOLTO]Come generare query dinamica PHP-MYSQL PHP 2
Albertoesse Problemi passaggio valori da un Form ad Una classe con query mysql PHP 12
G Problema con query mysql MySQL 1
B problema query mysql php PHP 1
L PHP: problema con query mysql. PHP 3
M MySql Query ciclo nidificato PHP 3
ivarello Asterisco e query mysql PHP 2
A Indicizzare i risultati di una query Mysql con php PHP 0
F Estrazione da db MySQL con query molto lunga PHP 13
B Aiuto query mysql in php PHP 1
S Autocompletamente con jQuery, PHP e MySQL - Problema con le query PHP 7
M cache query mysql PHP 1
Boscagoo Problema query mySQL MySQL 6
A sintassi query mysql PHP 3
R Quale la funzione mysql query. PHP 3
R Aiutino per query MySql PHP 8
neo996sps [PHP + MySQL + Server Linux] Upload semi riuscito e query non eseguite PHP 2
M Problema query MySQL MySQL 13

Discussioni simili