Esportazione parte di database

di il
6 risposte

Esportazione parte di database

Buongiorno a tutti.
Non so come venire a capo di una cosa, magari qualcuno ha già avuto esperienze in merito:
In sostanza ho un database con n tabelle, alcune sono di anagrafica quindi non cambiano diciamo, altre vengono aggiunti record ogni secondo o anche meno.

Dovrei fare un backup ogni ora (o ogni tot) di questo database per poi importare i dati su un altro database su un altra macchina.

Io vorrei esportare i dati relativi all' ultima ora ed importarli sul db dell'altra macchina.

esempio:

dalle 8 alle 9 vengono scritti i record
1,2,3,4,5

quindi vorrei estrarre solo quei record ed inserirli nel secondo db.

dalle 9 alle 10 vengono inseriti i record
6,7,8,9
quindi estrarre quei record ed inserirli nel secondo db

il secondo db avra' quindi i record:
1,2,3,4,5,6,7,8,9

Non posso esportare tutto il db perchè sarebbe enorme e devo trasferire il backup via ftp.

il tutto devo farlo con due app delphi... un sulla prima macchina che fa il backup e una sulla seconda macchine che recupera i file da ftp e importa i dati ogni volta che "vede" che ci sono nuovi file da importare sullo spazio ftp.

avete qualche suggerimento?

grazie a tutti.


p.s.
Ho trovato il porting di Tprocess per lazarus .. pensavo e speravo di poter cosi usare direttamente mysqldump ma vedo si fa abbastanza complicata la cosa, forse ce una via piu semplice che mi sta sfuggendo.

6 Risposte

  • Re: Esportazione parte di database

    Credo che la soluzione migliore sia quella di esportare i dati "nuovi" dal database di origine, in un formato a scelta purché strutturato, memorizzando l'ID oppure la data/ora dell'ultimo record raggiunto nella procedura di esportazione in modo da partire successivamente da quel punto per la nuova esportazione.

    Il file ottenuto può essere fornito all'applicativo che si occupa di leggerlo e di inserire le informazioni relative all'interno del database di destinazione.

    Come formato del file di output si potrebbe usare un CSV, oppure sfruttare le potenzialità dei componenti per l'accesso ai dati (es. il componente TFDMemTable della libreria FireDAC inclusa in Delphi) per esportare i record nel suo formato proprietario (binario, XML o JSON) e reimportare struttura e dati nel programma di destinazione, scandendo quindi i record e inserendoli nel database finale.

    Data la genericità e ampiezza della domanda, e non conoscendo la versione di Delphi che stai utilizzando, mi risulta difficile essere più preciso, ma mi pare che la problematica non sia nemmeno così difficile.

    Ciao!
  • Re: Esportazione parte di database

    Ciao a entrambi.
    Probabilmente non ho capito bene il contesto ma mi sembra che si tratti di Replica Master/Slave su MySQL.
    In questo caso utilizzerei i metodi standard per farlo:
    https://dev.mysql.com/doc/refman/5.7/en/replication-solutions.html
  • Re: Esportazione parte di database

    Grazie Alka:
    La versione di delphi è la 10.1, si ho i componenti firedac ma non mi è mai capitato di usare quel componente fdmemtable.

    ti permette di esportare parte di una tabella? e di reimportarla tramite un file csv, sql o altro?

    come suggerisci tu, mi memorizzo ogni volta quando è stato fatto l ultima estrapolazione, la mia idea era di usare mysqldump perche si puo' direttamente dargli una clausula where e crea le insert.

    Poi suldatabase di destinazione richiamare con "mysql" il dump fatto.


    grazie toki:
    ma non credo si possa trattare di replica, i due pc sono su reti differenti e non raggiungibili.
    ce di mezzo solo uno spazio ftp condiviso.
  • Re: Esportazione parte di database

    ziobacco ha scritto:


    La versione di delphi è la 10.1, si ho i componenti firedac ma non mi è mai capitato di usare quel componente fdmemtable.
    ti permette di esportare parte di una tabella? e di reimportarla tramite un file csv, sql o altro?
    Sì, basta definire la struttura della tabella tramite la proprietà FieldDefs, inserire al suo interno i record desiderati come se si trattasse di una tabella fisica di un database, e chiamare il metodo SaveToFile per salvare i dati, poi con il corrispondente LoadFromFile si possono ripristinare (sia la struttura che i dati).

    ziobacco ha scritto:


    la mia idea era di usare mysqldump perche si puo' direttamente dargli una clausula where e crea le insert.
    Poi suldatabase di destinazione richiamare con "mysql" il dump fatto.
    Se preferisci usare un tool specifico del DB, e questo fa al caso tuo (supporta lo scenario delle operazioni che vuoi fare), ben venga anche quello. Non ricordo tutte le opzioni quindi non saprei dirti di più, ma essendo disponibile la documentazione credo sia facile da verificare.

    Ciao!
  • Re: Esportazione parte di database

    Crei un xml da record filtrato ad un intervallo di tempo tipo alle 01:10 filtri dalle 00:00 alle 01:00; alle 02:10 filtri dalle 01:00 alle 02:00 ecc... oppure usi un timestamp.
    lo salvi, lo invii, lo carichi su altro database.
    sul forum se non erro c'e' gia' un post su come fare.
  • Re: Esportazione parte di database

    Ma quando crei/modifiche/elimini un record, non puoi salvarti l'ID di questi (e i dati) in un file?
Devi accedere o registrarti per scrivere nel forum
6 risposte