Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [MYSQL]Sincronizzare due db

    Salve
    Ho questa esigenza:
    Sincronizzare due db in modo tale che una variazione su uno di essi venga ripetuta sull'altro(o viceversa).
    La sincronizzazione può avvenire non in real time ma periodicamente con una frequenza da definire.
    Ho pensato di creare un programmino in php che vada a scrivere in una sorta di file di log i dati ogni qualvolta vi sia un UPDATE,DELETE,INSERT con il relativo date time.
    Mi chiedo se in alternativa MYSQL non abbia già di per se una funzione del genere (escludendo l'import export che opera sull'intero db).
    Nal manuale si fa cenno a myisamlog.exe e mysqlbinlog.exe ma sinceramente non ci capito granchè.
    Qualcuno ha già fatto qualcosa del genere?
    Grazie.
    pierogemin
    -------------
    -InterNET
    +CaberNET

  2. #2
    Utente di HTML.it L'avatar di *Ray*
    Registrato dal
    Oct 2000
    Messaggi
    495
    Urgh. Quello che chiedi e' pressoche' impossibile. Che operazioni vorresti effettuare?

    PS: nella mia sfera di cristallo vedo access nel tuo passato recente.. questo e' male :]

  3. #3
    Senti, fai revisionare la tua sfera perchè access non so nemmeno cosa sia.
    Quanto all'impossibile.... è tutto da vedere.
    pierogemin
    -------------
    -InterNET
    +CaberNET

  4. #4
    Originariamente inviato da pierogemin
    Senti, fai revisionare la tua sfera perchè access non so nemmeno cosa sia.
    Quanto all'impossibile.... è tutto da vedere.
    è (ovviamente) fattibilissimo, ma estremamente pesante come operazione

    1° Modo) nel file di log puoi scrivere le operazioni effettuate...e lo dai in pasto allo script PHP...php legge questo file\questi 3 file e in base al contenuto lancia le dovute query, ma corri il rischio di avere un file di log gigantesco ^^ e non so se è cosa buona

    2° Modo) Fai uno script che estragga il contenuto della tabella del database 1, estragga il contenuto dalla stessa tabella ma del database 2...metti tutto in degli array impostando la chiave sulla chiave primaria della tabella...(in questo modo puoi subito verificare se un record è presente o meno) e quindi verifichi cosi se vi sono dati da inserire o updatare (confrontando i campi)...costruisci la query ed elimini dai due array i campi trovati...fatto questo i record in + nel secondo array sono tutti record da eliminare...la query di delete la puoi fare unica usando la sintassi WHERE campo IN ('valore1', 'valore2', 'valore3' .... , 'valoreX'); e quindi risparmi 2390578 query...per l'insert, probabilmente puoi crearti un'insert unico o comunque se te lo costruisci dopo puoi crearti pochi insert (poche query che inseriscono + record in un colpo, la sintassi è estremamente semplice) ma per le update...devi PER FORZA lanciarle tutte :\

    il secondo modo è skifosamente pesante ma MOLTO + sicuro...il primo è + leggero ma + insicuro...se per un qualsiasi motivo finisce lo spazio, crashia lo script, l'utente smanetta assai...rischi di avere qualcosa di immenso e quindi di non avere sincronizzati correttamente i due DB
    alla fin fine, se usi il secondo metodo, ti basta fare la sincronizzazione durante la notte...anche se ci sta delle ore...che te frega...non danno fastidio a nessuno
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    Grazie Daniele (sempre preciso)
    Ora valuto le due maniere, ma ad occhio penso che opterò per la prima
    anche perchè una volta fatto l'aggiornamento si possono cancellare i records già controllati.Quindi se l'aggiornamento è frequrente (una o due volte al giorno) il file non dovrebbe crescere molto.
    pierogemin
    -------------
    -InterNET
    +CaberNET

  6. #6
    Utente di HTML.it L'avatar di *Ray*
    Registrato dal
    Oct 2000
    Messaggi
    495
    Secondo me tutti questi discorsi vanno benissimo per una singola tabella, ma con tabelle correlate?

    Supponi di avere un prodotto nella categoria 1. Nel database 1 lo sposti di categoria e lo metti nella categoria 2.

    Nel database 2 cambi la descrizione completamente e lo metti nella categoria 3.

    Chi ha ragione? Nessuno. Sono dati diversi.

    O ancora: nel database 1 cancelli la categoria 1. Nel database 2 e' pieno di prodotti della categoria 1. Cosa fai? La categoria 1 esiste o no? I prodotti vanno cancellati o devi ricreare la categoria?

    Chi ha ragione? Nessuno. Sono dati diversi.

  7. #7
    no...va bene anche per più tabelle...xche è ovvio che un sistema del genere deve prevedere che aggiorni la tabella e le tabelle correlate a quella...e siccome ti serve fare un shot del db originale...se il db originale è rotto hai poco che fare, in ogni caso ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    Ragazzi ,ho trovato:
    Se avvio mysqld con l'opzione mysqld --log si crea automaticamente un file di log che contiene tutte le query , senza bisogno quindi di scriver programmi specifici.Da questo file si può ripristinare ad es. un db rovinato, ma nel mio caso posso utilizzarlo per aggiornare il db n°2 (almeno credo).Ora è tardi, ci provo domani , poi vi faccio sapere.
    'Notte.
    pierogemin
    -------------
    -InterNET
    +CaberNET

  9. #9
    Originariamente inviato da pierogemin
    Ragazzi ,ho trovato:
    Se avvio mysqld con l'opzione mysqld --log si crea automaticamente un file di log che contiene tutte le query , senza bisogno quindi di scriver programmi specifici.Da questo file si può ripristinare ad es. un db rovinato, ma nel mio caso posso utilizzarlo per aggiornare il db n°2 (almeno credo).Ora è tardi, ci provo domani , poi vi faccio sapere.
    'Notte.
    beh...inserisce TUTTE le query......
    ^^

    secondo me cmq se usi l'altro metodo è meglio...xche se fai 13209763274 query impieghi il triplo del tempo
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Ciao,
    secondo me la cosa più semplice e veloce da fare sarebbe utilizzare un sistema di replica
    http://dev.mysql.com/doc/mysql/en/Replication.html

    oppure il normale mysqlimport (selezionando le tabelle che ti interessano), ovviamente da una macchina si deve poter accedere all'altra e un database deve prevalere sull'altro: cioè uno dei due sarà di sola lettura per quelle tabelle specifiche
    per favore NIENTE PVT TECNICI da sconosciuti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.