[RISOLTO]Sincronizzare tabelle tra due database

di il
27 risposte

[RISOLTO]Sincronizzare tabelle tra due database

Un saluto a tutti,
avrei la necessità del vostro supporto per cercare di comprendere come poter mantenere sincronizzate le tabelle di due database. In sostanza uno è un database in produzione e l'altro è una sua copia speculare che utilizzo per l'ambiente di test.



Avrei la necessità di mantenere sincronizzate sempre la tabella xxx_comm con la tabella xxx_sviluppo.

Confido in un vostro supporto e vi ringrazio anticipatamente

27 Risposte

  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Dipende da QUANTO allineata la vuoi avere.
    Un modo banale e' usare un script schedulato di notte che rigenera la tabella.

    Se le due tabelle sno nello STESSO DBMS, esiste la CREATE FROM SELECT ... (o qualcosa di molto simile, dipende dal DBMS)

    Nota: PESSIMISSIMISSIMA IDEA USARE lo stesso DBMS per test E produzione ANCHE se e' un eserczio per casa!

    In ambiente di test avere la tabella allineata al secondo rispetto alla produzione non ha molto senso.
    In ogni caso puoi sempre rischedulare con scadenza oraria o anche piu' stretta.
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Buongiorno @migliorabile,
    anche se per fare una battuta, se tu ti definisci "migliorabile" io come nik dovrei usare "fallimentare"...

    Posso dirti che entrambe le tabelle sono sullo stesso DBMS, tutte le mattine in maniera manuale, perchè diversamente non lo so fare, effettuo un backup del database in produzione e lo salvo su cloud ed in locale.

    Detto questo, volendo creare un task che magari tutte le sere, di tutti i giorni, alle ore 20:00 vada a sincronizzare le tabelle dei due database, come potrei procedere ?

    Grazie per l'intervento e l'interessamento
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Non so cosa significa sincronizzata.
    Se la tabella di test è semplicemente una copia di quella di produzione puoi cancellarla e rifarla sulla base di un dump di quella in produzione.

    Seconda possibilità metti due istanze di mysql una master e una slave

    Terza metti dei triage sulla tabella produzione che copiano i dati su quella di test in tempo reale
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    +m2+ ha scritto:


    Non so cosa significa sincronizzata.
    Se la tabella di test è semplicemente una copia di quella di produzione puoi cancellarla e rifarla sulla base di un dump di quella in produzione.

    Seconda possibilità metti due istanze di mysql una master e una slave

    Terza metti dei triage sulla tabella produzione che copiano i dati su quella di test in tempo reale
    Buongiorno +m2+,
    io posso ringraziarti infinitamente per i consigli, ma il dump lo faccio tutti i giorni manualmente per allineare i dati del dbms in produzione con il dbms di sviluppo, chiedevo qualcosa che automatizzasse questo processo manuale, non essendo preparato non so nemmeno lontanamente cosa significano l'opzione 2 e la 3 da te proposta.
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Beh se usi Linux un crontab del pipe di mysqldump su mysql
    Su windows una operazione pianificata
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    +m2+ ha scritto:


    Beh se usi Linux un crontab del pipe di mysqldump su mysql
    Su windows una operazione pianificata
    Non posso far altro che ringraziarti con tutto il cuore, comprendo fin troppo bene che far comprendere delle cose a chi è quasi a digiuno è impresa alquanto diffice se non impossibile.

    Continuerò a ricercare la soluzione più alla mia portata, per la distro ubuntu 16.4.9

    Grazie
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Ti serve qualcosa fatto così (versione semplificata)
    Considero scontato che esista già lo schema ilmiodatabasetest
    mysqldump -uroot -plamiabellapasswordroot ilmiobeldatabaseoriginale lamiatabella |mysql -uroot -plamiabellapasswordroot ilmiodatabasetest
    
    Se, per caso, hai poi nel path direttamente mysqldump e mysql, farai
    crontab -e
    e ci metterai qualcosa tipo
    30 20 * * * mysqldump -uroot -plamiabellapasswordroot ilmiobeldatabaseoriginale lamiatabella |mysql -uroot -plamiabellapasswordroot ilmiodatabasetest
    
    in questo caso è una pianificazione fatta alle 20:30
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Questa istruzione essenzialmente CANCELLA la tabella sul db di test, e la ricrea mettendoci sopra i dati della tabella di produzione, ogni volta che lo esegui.

    Chiaramente se le tabelle son piccole impiega poco, se son grandi la questione è diversa
    =========
    Un approccio diciamo così da "vero" professionista sarebbe quello di sfruttare una caratteristica peculiare di mysql/mariadb, cioè la configurazione master-slave (in realtà che ne sono altre, ma cerco di tenere bassa la complessità)
    Puoi avere un server mysql X con dentro un db e tante belle tabelle, chiamiamolo "master".
    Puoi avere un server mysql Y con dentro una COPIA del db di X, chiamiamolo "slave".
    Puoi impostare opportunamente la configurazione di X e Y in modo che le modifiche fatte su X vengano propagate (con una certa latenza) su Y.
    Si usa normalmente per migliorare le prestazioni in lettura con un reverse proxy tipo nginx, oppure per alta disponibilità etc.
    ----
    Ulteriore possibilità sono i trigger (cioè un SINGOLO mysql), ma gli spiegoni mi son riproposto di non farli, o comunque limitarli.
    Vedrai che tanti esperti qui sul forum te lo spiegheranno meglio di me.
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Ciao,
    grazie per la risposta.

    Mi sono collegato al server linux dove risiede mysql ed ho effettuato tutti i passaggi da te suggeriti. Adesso è tutto in crontab e domattina saprò dirti se tutto è andato a buon fine perchè il task è pianificato per le 20:30.

    Grazie ancora tantissimo per i suggerimenti ed il supporto

  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    C'è un possibile problema col percorso.
    Nel qual caso devi mettere il path assoluto.
    Spesso lo si dimentica ma è importante
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Buon

    +m2+ ha scritto:


    C'è un possibile problema col percorso.
    Nel qual caso devi mettere il path assoluto.
    Spesso lo si dimentica ma è importante
    Buongiorno,
    stamattina appena ho acceso il pc mi sono collegato per verificare se la procedura fosse andata a buon fine, purtroppo nulla da fare, non ha funzionato

    Adesso provo a riscrivere passando a mysqldump il percorso assoluto

    terrò aggiornato il thread ...
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Allora ho effettuato una verifica per cercare di individuare il path assoluto del database, solo che non so esattamente quale sia, o meglio conosco 100% il path assoluto del gestionale php, ma non quello del mysql, queste sono le info che ho sul database mysql

    Server del Database

    Server: Localhost via UNIX socket
    Tipo di server: MySQL
    Versione del server: 5.7.21-0ubuntu0.16.04.1 - (Ubuntu)
    Versione protocollo: 10
    Utente: root@localhost
    Codifica caratteri del server: UTF-8 Unicode (utf8)

    Web server

    Apache/2.4.18 (Ubuntu)
    Versione del client del database: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec965812n93b051f3827e02749b83 $
    Estensione PHP: mysqli Documentazione
    Versione PHP: 7.0.25-0ubuntu0.16.04.1
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Basta fare
    cd /
    find . |grep mysql

    Potrebbe essere /usr/bin usr local bin etc
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    +m2+ ha scritto:


    Basta fare
    cd /
    find . |grep mysql

    Potrebbe essere /usr/bin usr local bin etc
    Ho provato a scriverlo in questo modo :
    test@nas1:~$ mysqldump -uilmioutente -plamiapasswordroot /usr/bin/mysql ilmiodatabaseoriginale tutteletabellepresenti | mysql -ilmioutente -plamiapasswordroot ilmiodatabasetest
    Ho delle perplessità sulla sintassi del codice, ovvero prima del primo "pipe" io vado a dichiarare il nome del mio database originale e poi ho la necessità di considerare nel dump tutte le tabelle presenti e dopo il pipe l'istruzione deve essere mysql oppure mysqldump ?

Devi accedere o registrarti per scrivere nel forum
27 risposte