Sincronizzazione del database tra sviluppo / gestione temporanea e produzione


36

Ho un problema con la sincronizzazione del database WordPress tra sviluppo e produzione e mi chiedo come gli altri possano risolverlo. Sono consapevole di questa domanda, ma in realtà non copre il caso d'uso più cattivo e realistico.

Supponiamo di avere un sito Web WordPress dal vivo. Ho scaricato tutto, replicandolo nel nostro ambiente di sviluppo. Ho iniziato a fare cambiamenti. 1 settimana dopo sono pronto a distribuire i miei aggiornamenti. Nel frattempo, il database sul sito di produzione è cambiato (nuovi post, nuovi commenti, ecc.). Come posso sincronizzare i cambiamenti tra produzione e sviluppo durante l'implementazione ed è possibile automatizzare (almeno un po ') questo processo?



Risposte:


10

Potrebbe esserci un modo migliore che mi manchi, ma ti darò 2 opzioni:

1.Utilizzare XML Export per esportare nuovi post e commenti. Quindi utilizzare l' importatore di WordPress per importare i nuovi post e commenti nel database degli sviluppatori

È meglio importare in sviluppo quindi spostare il database in produzione perché quando lo si importa scaricherà tutti i nuovi file multimediali dalla produzione.

Nel frattempo la produzione è cambiata (nuovi post, nuovi commenti, ecc.)

Ciò risolverebbe il problema di apportare qualsiasi contenuto modificato.

2. Utilizzare il comando INSERT IGNORE INTO MySql per aggiungere le nuove tabelle da dev. o il REPLACE comando sovrascrivere righe duplicate nella stessa tabella.

Prima di usare MySql fai un backup di entrambi i database e sposta il database gz sul server di produzione e carica il dump (cambia il nome di dev se è uguale alla produzione.

INSERT IGNORE INTO `_wp_production_db`.`wp_cool_plugin_options`
SELECT *
FROM `_wp_dev_db`.`wp_cool_plugin_options`

Non mi sento a mio agio con i comandi MySql, quindi vorrei andare con l'opzione 1.


notare che le esportazioni XML si bloccano da qualche parte con la quantità di post, ad esempio sul mio blog +10.000 post che non riesco a usarlo.
edelwater,

@edelwater, sì, questo dipende dalle impostazioni del server per max_execution_time (in genere 30 secondi), per esportazioni molto grandi questo valore deve essere impostato su un valore più alto (1-2 minuti o più)
mike23

2

Se si tratta solo dello stesso tipo esatto di dati (alcuni nuovi post sul blog, nuovi commenti) non sono sicuro del motivo per cui è necessario sincronizzarli davvero. Non è che cambierà il modo in cui funziona il codice sul sito poiché è solo più o meno lo stesso. In genere non mi preoccupo a meno che non si tratti di un nuovo tipo di dati.

Mi assicuro sempre di avere un buon campione di dati per il sito, non tutti i post, le pagine, i commenti dal sito live.


2
Buon punto! Tuttavia, se la produzione presenta alcune modifiche nell'area puramente del contenuto (post, commenti) e dev presenta modifiche, ad esempio impostazioni e configurazione (ad esempio, 5 plug-in aggiunti e ottimizzato le loro impostazioni) come si riporterebbe queste modifiche alle impostazioni senza lavorare due volte (uno tempo in sviluppo e uno in produzione)?
Alex,

questa è la vera domanda non è vero e non ho una risposta per questo.
curtismchale,

-1. A volte abbiamo bisogno di averli sincronizzati. Specialmente per post / pagine iddal database.
Francisco Corrales Morales,

2

Non appena si tocca l'argomento di apportare modifiche in parallelo, si tocca l'area della gestione della configurazione. Con molti modelli, proprie community (http://www.cmcrossroads.com/) e strumenti non tanto per la gestione delle versioni (come svn / git) ma per il supporto della gestione della configurazione (pattern) come clearcase. (aree totalmente diverse).

In questo caso è ancora una situazione semplice e troverai che funziona con alcune limitazioni, alcuni lavori manuali e alcune liste.

Lo scenario a cui sto pensando di renderlo più descrittivo della soluzione ideale: più sviluppatori che lavorano sulla stessa base di codice, più ambienti di test, più ambienti di accettazione, più ambienti di accettazione della produzione possibilmente in tutti gli angoli del mondo.

Se vuoi farlo un po 'più professionale:

a) annota un elenco di tutti gli elementi di configurazione che incontri, questo potrebbe essere il codice WordPress stesso, plugin da esterni, contenuti, metadati e decidere quali di questi vuoi portare sotto una sorta di "gestione", quali sono importanti.

b) descrivere i flussi di lavoro che possono verificarsi, ad es. cosa succede con una correzione, cosa succede con qualcosa di nuovo in fase di sviluppo, in che caso cambi contenuto dalla tua parte, come si chiama e chi lo fa, chi ne è il proprietario ad esempio un nuovo post o un nuovo plug-in.

c) per il lavoro in parallelo, descrivere innanzitutto quali elementi della configurazione si desidera gestire, decidere se il flusso va sempre dallo sviluppo alla produzione o se è realmente necessario farlo in due modi.

d) per ciascuno dei tipi di CI sotto (a) scrivere una risoluzione. Ad esempio per TUTTI quelli che sono testo (o testo esportato come file php ma ANCHE testo normale in file XML) è possibile la fusione. Questo non è davvero un problema, ma è necessario un buon strumento di unione. ad es. con ClearCase si unirebbero in 3 modi le seguenti situazioni: 1) banali fusioni: le farà automaticamente 2) non banali automatiche: le faranno automaticamente MA è necessario verificarle 3) non banali non automatiche: questo è un conflitto, ad es. su 1 riga sono state apportate diverse modifiche. Le cose non banali sono la parte minima di cui devi occuparti manualmente, un buon strumento di fusione ti guiderà in questo ad esempio quello in clearcase (che fa anche la fusione di parole e dove puoi collegare altre fusioni commerciali o non commerciali per un file specifico tipi). Inoltre, se hai identificato sotto (a) file che dovrebbero essere copiati, il loro comportamento sarebbe quello di non essere unito ma semplicemente copiato in un modo sovrascrivendo l'altra versione senza unire (ad esempio plugin che non hai modificato). Molti di questi tipi sono possibili con comportamenti diversi. Ma annota le relazioni tra CI,

Quindi per le fusioni non basate su testo è necessario prendere una decisione su come gestirle, ad esempio immagini che sono state modificate in 2 punti. Potresti decidere qui che la produzione ha sempre la preferenza (almeno è quello che penso), il che la rende semplice.

Quindi ... per risolvere questo problema è necessario uno strumento di gestione delle versioni che supporti diversi flussi. Ogni flusso rappresenterebbe una parte. (questo può essere immensamente complesso a seconda delle tue esigenze, ma in questo caso penso che sia molto semplice).

Se ora riesci ad avere questi flussi sotto le tue installazioni di WordPress e sincronizzali anche con il contenuto del database, ecc ... allora puoi eseguire le fusioni nello strumento CM / versioning e quindi esportarlo nuovamente nell'altro ambiente.

Il fatto è ... devi prima scrivere questo. Questo non è un trucco tecnico. Si tratta di un modello predefinito in Config Management quindi niente di strano qui, ma è necessario scriverlo. Ad esempio, è possibile che un plug-in installato apporti modifiche al database con alcuni dati diversi in un altro ambiente, quindi è necessario disporre di una procedura aggiuntiva al riguardo.

Tecnicamente quasi sempre tutto è possibile controllare http://www.cmcrossroads.com/forums per scenari che sono dozzine o centinaia di volte più complessi, sempre usando lo stesso approccio e usando lo stesso set di schemi CM.

in breve: mettere un livello di gestione delle versioni al di sotto di esso, automatizzare le fusioni e gestire i conflitti, quindi importare nell'ambiente di destinazione. Pensa a una strategia di streaming che si adatta qui e scrivila. Esegui una gestione del CM un po 'strana. Sarebbe la soluzione professionale altrimenti installare qualche copia di db hack, script ecc ...


2

Ho appena pubblicato un post su come sincronizzare i dati di produzione con la nostra gestione temporanea, dai un'occhiata al mio post sul blog su: http://blog.wp.weightpoint.se/2012/01/04/synchronizing-wordpress-multisite-database -da-produzione-di-staging-enviorment /

Se vuoi sincronizzare anche il codice e altre cose, ti consiglio di creare un repository git o mercurial con il relativo file ignore.

Se si desidera effettuare aggiornamenti differenziali per produrre dalla gestione temporanea, credo che la creazione di script di migrazione sia il modo più sicuro e migliore.

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.