Sincronizzazione del database Wordpress tra dev e prod


19

In precedenza è stata posta una domanda su come sincronizzare i file e il database tra due installazioni di Wordpress.

Per quanto riguarda il livello del database, la risposta è generalmente scaricare un database e inserirlo in un altro server. Il problema è che si finisce per perdere tutte le modifiche che sono state potenzialmente apportate sul server prod. Ad esempio, metriche di utilizzo, commenti, ecc ...

Con questo in mente, stavo iniziando a chiedermi se sarebbe possibile estendere l'ORM di Wordpress in modo da poter generare delta e quindi iniettarli nel sito di produzione.

Qualcuno ha provato questo, esaminandolo, o hai idee o commenti?


1
Ci ho guardato, sì, ma non ho ottenuto molto. Se potessi indicare una prova di concetto con un'altra piattaforma CMS, sono sicuro che potremmo riaccenderla per WordPress.
EAMann,

Che ne dici di replica?
kovshenin,

Bene la replica con mysql richiederebbe una qualche forma di replica master-master che è una PITA. Se si tiene conto del fatto che questo è tra dev e prod, la replica dovrebbe essere ritardata, il che molto probabilmente si romperà continuamente.
jonathanserafini,

Risposte:


11

La realtà è che ciò che vogliamo è questo: http://www.liquibase.org/

Liquibase è una libreria open source (con licenza Apache 2.0), indipendente dal database per tracciare, gestire e applicare le modifiche al database. È basato su una premessa semplice: tutte le modifiche al database sono archiviate in una forma leggibile ma tracciabile e controllate nel controllo del codice sorgente.

Tuttavia, il nostro processo di sviluppo non lo supporta. In genere non modifichiamo il database tramite script discreti che scriviamo noi stessi, utilizziamo plugin che attiviamo. Non scriviamo script DML per modificare i dati di ricerca che poi controlliamo nel controllo del codice sorgente, utilizziamo un'interfaccia utente nella pagina di amministrazione e quindi non abbiamo un codice sorgente per un uso successivo nella replica di tale modifica durante la migrazione.

Tuttavia, possiamo emularne alcuni, utilizzando alcuni degli strumenti elencati in questa pagina:

/programming//q/225772/149060

Ad esempio, liquidbase ha una caratteristica diff che include, facoltativamente, modifiche ai dati. Potremmo, potenzialmente, generare lo schema e i dati diff a uno script, escludendo (il più possibile) alcune tabelle che potrebbero includere dati di test (ad esempio post, ecc.) E quindi applicare lo script al database di produzione.

MySQLDiff (discusso sulla domanda StackOverflow) fa differenze nello schema, e l'autore raccomanda mysql_coldiff per differenze di dati a livello di tabella - entrambi sono implementati in perl, se gli strumenti java (liquidbase) sono troppo ricchi di risorse per i tuoi server - anche se porta entrambi i database locali e l'esecuzione dello strumento sul PC risolve questo problema ...

Se vogliamo davvero farlo nel modo giusto, dovremmo registrare qualsiasi sql relativo a impostazioni, opzioni o altre modifiche alla configurazione e qualsiasi modifica dello schema - e convertire il codice registrato in uno script di migrazione da riprodurre sul nostro server di produzione. Riproduci lo script di migrazione sul server, copia i file del sito wordpress (esclusi i caricamenti, se applicabile) e siamo in oro.

Quindi, mi sembra che la migliore via d'uscita sia il plug-in di migrazione-builder di uno sviluppatore che intrappola il sql di cui abbiamo bisogno, lo memorizza e quindi genera uno script di migrazione dal codice registrato, piuttosto che creare un modo per unire i database tra messa in scena e produzione. Sembra anche un problema più semplice da risolvere.

Se guardiamo il codice del plug-in di strumenti strumentali di @bueltge chiama l'ispirazione: https://gist.github.com/1000143 (grazie a Ron Rennick tramite G + per avermi indirizzato nella direzione di SAVEQUERIES e il gancio di spegnimento, che portami a trovarlo)

- modificalo per ottenere invece l'uscita SAVEQUERIES 
- Esegui solo mentre sei in admin 
- filtra tutte le selezioni 
- salva i risultati sulla tabella nel gancio di spegnimento 
- potremmo attivare selettivamente il trapping dell'output in base a ciò che stavamo facendo al momento.  

Per esempio:

Nome acquisizione: attiva e configura il plugin XYZ

Capture State Attiva / disattiva

... installa e configura il plugin XYZ

Capture State Attiva / disattiva

Esporta script di migrazione per: Attiva e configura plugin XYZ

Premere il pulsante Esporta - per produrre un campo di testo popup con l'SQL intrappolato filtrato - idealmente preformattato come uno script di shell con chiamata da mysql da riga di comando. Copialo e incollalo nella cartella del codice di migrazione e aggiungilo al repository del codice sorgente.

Attenta attenzione a attivare e disattivare l'acquisizione mentre lavori e sarai in grado di generare lo script di migrazione perfetto per portare il tuo database di produzione in una configurazione equivalente al tuo database di gestione temporanea.

Cosa c'è di meglio, avrai uno script (o una serie dello stesso) che puoi TESTARE. Imaging con script di migrazione replicabili, verificabili !!

Sono già innamorato.

Chiunque altro?


2
Bel commento. Ho trascorso molto tempo su questo problema perché ho clienti che cercano il nostro aiuto. È un problema davvero difficile, ma abbiamo deciso che scendere al livello di SQL è probabilmente una soluzione "bollire l'oceano" , il che significa che è improbabile che il 100% funzioni. Penso che la soluzione sia usare un approccio "divide-and-conquer" con un codice esplicito che comprenda la struttura di WordPress e che fornisca hook per qualsiasi altra cosa. Spero di poter presentare pubblicamente una soluzione praticabile ad un certo punto in futuro.
MikeSchinkel,

Quindi .... chi vuole farlo?
Dave Kiss,

per chiunque cerchi, sembra che questa stessa idea sia disponibile come plugin: wordpress.org/plugins/query-recorder
majick

3

Il plug-in WordPress di sincronizzazione del database fa un ottimo lavoro di sincronizzazione dei dati tra due server.

Per impostazione predefinita, sovrascrive TUTTI i dati di destinazione, tuttavia ho appena implementato alcuni miglioramenti al plug-in che consentono di sincronizzare solo tabelle di database specifiche. Questo può aiutarti a conservare commenti, utenti e altri dati simili che non desideri sovrascrivere. Ti dà la granularità di cui hai bisogno?

Non ho ancora pubblicato le mie modifiche al pubblico, ma se sei interessato a una copia, inviami una e-mail all'indirizzo simon-at-yump.com.au. Se qualcuno lo trova utile o ha richieste di funzionalità aggiuntive, fammi sapere e vedrò cosa posso fare.


AGGIORNAMENTO: Ho appena trovato il plug -in WP-Sync-DB , che è un fork del plug -in commerciale WP-Migrate-DB-Pro . Fa una cosa molto simile, anche se probabilmente ha più lucido della sincronizzazione del database .


0

Esiste un servizio commerciale relativamente nuovo specifico per questo compito. Si chiama RAMP:

http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress


1
Esistono limitazioni a quel servizio che non lo rendono adatto al mio caso d'uso:
marfarma

2
Il mio caso d'uso: aggiunta di funzionalità mentre la produzione aggiunge contenuto. Citazione: "I seguenti elementi non sono attualmente supportati: Impostazioni (impostazioni principali e del plug-in, a meno che non optino per la RAMP)" Il 99,99% delle opzioni e impostazioni del tema e del plug-in non verrà migrato. Senza modifiche al codice sulla produzione, i post-tipi personalizzati non migreranno. Dimentica di aggiungere tabelle personalizzate e i loro dati.
marfarma,

1
Quel prodotto ha un caso d'uso valido: mettere in scena il contenuto e quindi inviarlo dal vivo. Purtroppo non è questo il problema di cui mi occupo. Tornando all'OP, non è chiaro quale caso d'uso abbia a che fare - quindi potrebbe essere la soluzione perfetta per il loro negozio.
marfarma,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.