[RISOLTO]Sincronizzare tabelle tra due database

di il
27 risposte

27 Risposte - Pagina 2

  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Infatti è completamente sbagliata

    La prima cosa è trovare dove siano i due eseguibili, che sono
    mysql e mysqldump.
    Come detto un modo "trogloditico", ma adatto al tuo caso, è fare
    
    cd /
    find .|grep mysqldump
    
    In questo modo vedrai ogni file che si chiama mysqldump, in particolare concentrati su quelli dentro le cartelle "bin"

    Se, per esempio, è dentro /usr/bin, allora proverai a fare
    
    /usr/bin/mysqldump
    Se è giusto ti dirà tante belle cose, altrimenti un messaggio d'errore.
    Analogamente per mysql (che è tipicamente nella stessa cartella).

    Trovato quello, il percorso degli eseguibili, la sintassi è quella che ti ho messa, però con davanti il percorso al nome degli eseguibili.

    Se vuoi copiare (dumpare) un database intero, invece di una tabella, basta che non la indichi (la tabella)

    Per fare le prove col crontab nulla ti vieta di impostarlo che so 5 minuti dopo al momento in cui provi, e poi di spostarlo man mano sempre con
    crontab -e
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Esempio
    
    root@aserver:/ # cd /
    root@aserver:/ # find .|grep mysqldump
    ./temporaneo/dedup/3/tank/d/posta/dbmysql/mysqldump.exe
    ./temporaneo/dedup/3/tank/d/documenti/dbmysql/mysqldump.exe
    ./temporaneo/dedup/2/tank/d/posta/dbmysql/mysqldump.exe
    ./temporaneo/dedup/2/tank/d/documenti/dbmysql/mysqldump.exe
    ./temporaneo/dedup/1/tank/d/documenti/dbmysql/mysqldump.exe
    ./temporaneo/dedup/1/tank/d/posta/dbmysql/mysqldump.exe
    ./tank/d/documenti/dbmysql/mysqldump.exe
    ./tank/d/posta/dbmysql/mysqldump.exe
    ./usr/ports/databases/mysqldumper
    ./usr/ports/databases/mysqldumper/pkg-plist
    ./usr/ports/databases/mysqldumper/Makefile
    ./usr/ports/databases/mysqldumper/distinfo
    ./usr/ports/databases/mysqldumper/pkg-message
    ./usr/ports/databases/mysqldumper/pkg-descr
    ./usr/ports/databases/mysqldump-secure
    ./usr/ports/databases/mysqldump-secure/pkg-plist
    ./usr/ports/databases/mysqldump-secure/Makefile
    ./usr/ports/databases/mysqldump-secure/distinfo
    ./usr/ports/databases/mysqldump-secure/pkg-descr
    ./usr/local/bin/wsrep_sst_mysqldump
    ./usr/local/bin/mysqldumpslow
    ./usr/local/bin/mysqldump
    ./usr/local/man/man1/wsrep_sst_mysqldump.1.gz
    ./usr/local/man/man1/mysqldumpslow.1.gz
    ./usr/local/man/man1/mysqldump.1.gz
    ./monta/nexes_aserver/copiarsync/tank/d/posta/dbmysql/mysqldump.exe
    ./monta/nexes_aserver/copiarsync/tank/d/documenti/dbmysql/mysqldump.exe
    
    In questo esempio il risultato è
    /usr/local/bin/mysqldump
    ed il percorso è quindi

    /usr/local/bin (non è una macchina linux, è una macchina unix)
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    root@uord:/# find .|grep mysqldump
    ./usr/share/man/man1/mysqldump.1.gz
    ./usr/share/man/man1/wsrep_sst_mysqldump.1.gz
    ./usr/share/man/man1/mysqldumpslow.1.gz
    ./usr/bin/wsrep_sst_mysqldump
    ./usr/bin/mysqldumpslow
    ./usr/bin/mysqldump
    ./etc/mysql/conf.d/mysqldump.cnf
    root@uord:/#
    Su questa macchina Linux il risultato è

    /usr/bin

    quindi proverai a scrivere
    /usr/bin/mysqldump
    /usr/bin/mysql
    /usr/bin/mychebelloerrore
    Nel terzo caso dovresti avere un errore, nei primi due tante belle cose.
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Questa dovrebbe essere la mia sintassi, l'ho schedulata a 2 minuti e verifico...
    */2 * * * * /usr/bin/mysqldump -uilmioutente -plamiapass ilmiodatabaseoriginale | /usr/bin/mysql -uilmioutente -plamiapass ilmiodbtest
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Un backup io l'avrei fatto, vista la scarsa consuetudine, cioè
    un
    
    /usr/bin/mysqldump (blablabla) >/tmp/copia.sql
    
    Anzi lo farei
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Se invece vuoi fare qualcosa più da informatico
    
    use ilmiodb;
    
    drop trigger if exists inserisci_test;
    DELIMITER ;;
    CREATE TRIGGER inserisci_test
    AFTER INSERT ON ilmiodb.cheneso
    FOR EACH ROW
    BEGIN
    INSERT INTO dbcopiato.cheneso
    		(...elenco dei campi...)
    			select
    				new.elencodeicampi from ilmidob.lamiatabella kz where (kz.id=new.id)
    		END IF;	
    	END IF;
    END ;;
    DELIMITER ;
    
    
    Il realtà ho messo i nomi un po' a caso.
    poi metterai un after delete e after update.
    In questo modo la tabella sarà sincronizzata in tempo reale (quasi) con quella originale.
    Non so che senso abbia, ma si può fare.
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    +m2+ ha scritto:


    Se invece vuoi fare qualcosa più da informatico
    
    use ilmiodb;
    
    drop trigger if exists inserisci_test;
    DELIMITER ;;
    CREATE TRIGGER inserisci_test
    AFTER INSERT ON ilmiodb.cheneso
    FOR EACH ROW
    BEGIN
    INSERT INTO dbcopiato.cheneso
    		(...elenco dei campi...)
    			select
    				new.elencodeicampi from ilmidob.lamiatabella kz where (kz.id=new.id)
    		END IF;	
    	END IF;
    END ;;
    DELIMITER ;
    
    
    Il realtà ho messo i nomi un po' a caso.
    poi metterai un after delete e after update.
    In questo modo la tabella sarà sincronizzata in tempo reale (quasi) con quella originale.
    Non so che senso abbia, ma si può fare.
    Come si vede chi ha un'elevata preparazione e chi invece arranca ehhh.
    Ad ogni modo, vorrei anche implementare qualcosa di più professionale, ma diciamo che non so in phpmyadmin dove andare a scrivere il trigger e avendo tu "giustamente" inserito nomi di fantasia, io non sono (ancora) in grado di convertire i nomi di fantasia in nomi corretti e reali e soprattutto nella parte dell'INSERT INTO dbcopiato.cheneso ecc ecc. non ho la più pallida idea di come andare a valorizzare correttamente quei campi.
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Salve,
    giusto per correttezza e per non lasciare il presente thread senza risoluzione, volevo far presente che pur avendo schedulato il crontab in questo modo
    */2 * * * * /usr/bin/mysqldump -uilmioutente -plamiapass ilmiodatabaseoriginale | /usr/bin/mysql -uilmioutente -plamiapass ilmiodbtest
    Le tabella del databaseoriginale non vanno a sovrascriversi, quindi allinearsi con ilmiodbtest
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Devi fare prima un drop schema e create schema se vuoi fare un db intero e non una tabella
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Questo avviene poiché mysqldump,senza i relativi switch, non indica il db nel dump e analogamente mysql liscio non sa su quale db operare.
    Se elaborassi un dump da tenere giustapporresti drop create e use schema al flusso dumpato
    Oppure operi con switch di mysqldump e mysql

    Spero sia chiaro gli spiegoni non li faccio più
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Sei troppo avanti per quel che concerne la mia misera preparazione, mi sa che continuerò a fare i dump manualmente
    Ad ogni modo grazie lo stesso infinitamente per l'impegno profuso, di certo è palese che il problema è la mia scarsa preparazione, che dire tu ce l'hai messa tutta, ma immagina di spiegare l'algebra ad un bambino che non conosce l'aritmetica di base
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Vabbè mi sembra uno psicodramma modesto.
    Il mio consiglio è quello di creare un piccolo script, ad esempio
    scriptino.sh, dove metterci qualcosa tipo questo
    (sono percorsi UNIX attenzione per Linux normalmente non c'è il local)
    Supponiamo di voler copiare il database sticazzi nel database copiona
    e che la password di root sia 1

    allora farai così
    /bin/echo "drop database copiona;" | /usr/local/bin/mysql -uroot -p1
    /bin/echo "create database copiona;" | /usr/local/bin/mysql -uroot -p1
    /usr/local/bin/mysqldump -uroot -p1 sticazzi |/usr/local/bin/mysql -uroot -p1 --database=copiona
    Il primo comando cancella il database copiona. Se esso non esiste, fallisce (ma chi se ne frega? essendo su statement separato non accade nulla)
    Il secondo crea il database copiona (perchè non uso IF NOT EXISTS? perchè non sempre c'è)
    il terzo dumpa il contenuto di sticazzi dentro mysql che prende i dati per il database copiona.

    Penso sia banale, la cosa più "difficile" sono i percorso. Roba di circa 15 secondi.

    Supponiamo che il file si chiami /root/scriptino.sh
    Darai un tristissimo (sì lo so, ma che mi frega, lo rendo eseguibile per tutti e buonanotte9
    chmod +x /root/scriptino.sh
    E poi nel crontab -e
    
    0 06 * * * /root/scriptino.sh > /dev/null 2&1
    
    Questo parte alle 6 del mattino e scarta gli eventuali errori (tanto, che mi frega?)
    Ovviamente puoi far quello che ti pare, è proprio una banalità.
    Non ho messo la shebang appositamente
    Fine spiegone
  • Re: [RISOLTO]Sincronizzare tabelle tra due database

    Buonasera,
    grazie al tuo supporto e grazie al tuo script, ho raggiunto il risultato atteso.

    Sei stato gentilissimo.

    Buonaserata
Devi accedere o registrarti per scrivere nel forum
27 risposte