Sincronizzazione del database di Wordpress tra dev e prod
-
-
Ci hoesaminato,sì,manon ho ottenutomolto.Sepotessiindicare unaprova di concetto con un'altrapiattaforma CMS,sono sicuro chepotremmo reimpostarlaper WordPress.I have looked into it, yes, but haven't accomplished much. If you could point to a proof-of-concept with another CMS platform, I'm sure we could rejigger it for WordPress.
- 1
- 2011-07-29
- EAMann
-
E la replica?How about replication?
- 0
- 2011-08-02
- kovshenin
-
Bene la replica conmysql richiederebbe una qualcheforma di replicamaster-master che è un PITA.Se sitiene conto delfatto che questo ètra deve prod,la replica dovrebbeessere ritardata,il chemoltoprobabilmente siinterromperà continuamente.Well replication with mysql would require some form of master-master replication which is a PITA. If you factor in the fact that this is between dev and prod, then replication would have to be delayed which would most likely break all the time.
- 0
- 2011-08-04
- jonathanserafini
-
3 risposta
- voti
-
- 2011-08-04
La realtà è che ciò che vogliamo è questo: http://www.liquibase.org/
Liquibase è un open source (con licenza Apache 2.0), libreriaindipendente dal databaseperilmonitoraggio,lagestionee l'applicazione modifiche al database. Sibasa su una semplicepremessa:tuttoil database lemodifiche vengonomemorizzatein unaforma leggibile dall'uomomatracciabilie verificate nel controllo del codice sorgente.
Tuttavia,ilnostroprocesso di svilupponon lo supporta. Ingenerenonmodifichiamoil databasetramite script discreti che scriviamonoi stessi,utilizziamoplugin che attiviamo. Non scriviamo script DMLpermodificarei dati di ricerca chepoi controlliamonel controllo del codice sorgente,utilizziamo un'interfaccia utentenellapagina di amministrazionee quindinon abbiamo codice sorgente da utilizzarein seguitoper replicaretalemodifica durante lamigrazione.
Tuttavia,possiamoemularne alcune,utilizzando alcuni degli strumentielencatiin questapagina:
https://stackoverflow.com/q/225772/149060
Adesempio,liquidbase ha unafunzione diff cheinclude anche,facoltativamente,modifiche ai dati. Potremmo,potenzialmente,produrre lo schemae il diff dei datiin uno script,escludendo (ilpiùpossibile) alcunetabelle chepotrebberoincludere dati ditest (adesempiopost,ecc.) E quindi applicare lo script al database diproduzione.
MySQLDiff (discussonella domanda StackOverflow)esegue differenze di schemae il suo autore consiglia mysql_coldiff per differenze di dati a livello ditabella -entrambi sonoimplementatiin perl,segli strumentijava (liquidbase) sonotroppopesantiperi tuoi server - anche seportareentrambii databasein localeedeseguire lo strumento sultuo PC risolveilproblema ...
Se vogliamo davverofarlonelmodogiusto,dovremmo registrare qualsiasi sql relativo aimpostazioni,opzioni o altremodifiche alla configurazionee qualsiasimodifica dello schemae convertireil codice registratoin uno script dimigrazionepergiocare controilnostro server diproduzione . Riproduci lo script dimigrazione sul server,copiai file del sito wordpress (esclusii caricamenti,se applicabile)e siamo d'oro.
Quindi,mi sembra,che lamigliore via d'uscita siailpluginperilgeneratore dimigrazione di uno sviluppatore cheintercetta lo sql di cui abbiamobisogno,lomemorizzae quindigenera uno script dimigrazione dal codice registrato,piuttosto cheper costruire unmodoper unire databasetra staginge produzione. Sembra anche unproblemapiù semplice da risolvere.
Seguardiamoil codice dell'hook di strumentazione di @bueltge chiamailplug-inpertrarneispirazione: https://gist .github.com/1000143 (grazie a Ron Rennicktramite G +per avermiindicatonella direzione di SAVEQUERIESe ilgancio di arresto,chemi haportato atrovarlo)
-modificaloper ottenereinvece l'output SAVEQUERIES -eseguito solomentre seiin amministrazione -filtratutte le selezioni - salvai risultatinellatabellanelgancio di arresto -potremmo attivare o disattivare selettivamenteiltrapping dell'outputin base a ciò che stavamofacendo almomento.
Adesempio:
Acquisiscinome: attiva & amp; Configurailplugin XYZ
Capture State Toggle - attivato
...installae configurailplugin XYZ
Capture State Toggle - off
Esporta script dimigrazioneper: Attiva & amp; Configurailplugin XYZ
Premereilpulsante Esporta -perprodurre un campo ditestopopup con l'SQLfiltratointrappolato -idealmentepreformattato come uno script di shell con chiamata da riga di comando amysql. Copia & amp;incollalonella cartella del codice dimigrazionee aggiungilo altuo repository di codice sorgente.
Attenta attenzione ad attivaree disattivare l'acquisizionementre lavorie saraiin grado digenerare lo script dimigrazioneperfettoperportareiltuo database diproduzione a una configurazioneequivalente altuo database di staging.
Cosa c'è dimeglio,avrai uno script (o una serie dello stesso) chepuoi TESTARE. Imaging con script dimigrazione replicabilie testabili !!
Sonogiàinnamorato.
Qualcun altro?
The reality is that what we want is this: http://www.liquibase.org/
Liquibase is an open source (Apache 2.0 Licensed), database-independent library for tracking, managing and applying database changes. It is built on a simple premise: All database changes are stored in a human readable yet trackable form and checked into source control.
However our development process doesn't support it. We typically don't modify the database through discrete scripts we write ourselves, we use plugins that we activate. We don't write DML scripts to modify look-up data that we then check into source code control, we use a UI on the admin page and therefore have no source code for later use in replicating that change during migration.
However, we can emulate some of it -- using some of the tools listed on this page:
https://stackoverflow.com/q/225772/149060
For instance, liquidbase has a diff feature that also, optionally includes changes to data. We could, potentially, output the schema and data diff to a script, excluding (as possible) certain tables likely to include test data ( i.e. post, etc. ) and then apply the script to the production database.
MySQLDiff (discussed on the StackOverflow question) does schema diffs, and it's author recommends mysql_coldiff for table-wise data diffs - both are implemented in perl, if java tools (liquidbase) are too resource heavy for your servers -- although bring both databases local and running the tool on your PC solves that problem ...
If we really want to do it right, we should log any sql that relates to settings, options, or other configuration changes, and any schema changes -- and convert the logged code into a migration script to play against our production server. Play the migration script against the server, copy the wordpress site files (excluding uploads, if applicable) and we're gold.
So, it seems to me, that the best way out, is a developer's migration-builder-plugin that traps the sql we need, stores it and then generates a migration script from the logged code, rather than to build a way to merge databases between staging and production. Seems a simpler problem to solve too.
If we look at the code of @bueltge 's instrumenting hook calls plugin for inspiration: https://gist.github.com/1000143 (thanks to Ron Rennick via G+ for pointing me in the direction of SAVEQUERIES and the shutdown hook, that lead me to find it)
-- alter it to get the SAVEQUERIES output instead -- only run while in admin -- filter out all selects -- save results out to table in the shutdown hook -- we could selectively toggle output trapping based on what we were doing at the moment.
For example:
Capture Name: Activate & Configure Plugin XYZ
Capture State Toggle - on
... install and configure plugin XYZ
Capture State Toggle - off
Export Migration Script for: Activate & Configure Plugin XYZ
Press Export Button -- to produce a popup text field with the filtered trapped SQL - ideally pre-formatted as a shell script with command-line call to mysql. Copy & paste it out to your migration code folder and add to your source code repository.
Careful attention to toggling the capture on and off as you're working and you'll be able to generate the perfect migration script to take your production database to an equivalent configuration to your staging database.
What's better, you'll have a script (or series of same) that you can TEST. Imaging having replicable, testable, migration scripts!!
I'm in love already.
Anyone else?
-
Bella recensione.Hopassatomoltotempo su questoproblemaperché ho clienti che cercanoilnostro aiuto.È unproblema davvero difficile,ma abbiamo deciso che scendere al livello di SQL èprobabilmente una soluzionetroppo * "bollire l'oceano" *,il che significa che lepossibilità difarlofunzionare al 100% sonoimprobabili.Penso che la soluzione sia usare un approccio * "divideet impera" * con codiceesplicito che capisca la struttura di WordPresse chefornisca agganciper qualsiasi altra cosa.Spero chein futuropotremopresentarepubblicamente una soluzionepraticabile.Nice writeup. I've been spending lots of time on this problem because I've got clients looking for our help it. It's a really hard problem, but we've decided that going down to the level of SQL is probably a too much of a *"boil the ocean"* solution meaning chances of getting it to work 100% are unlikely. I think the solution is use a *"divide-and-conquer"* approach with explicit code that understand's WordPress' structure, and that provides hooks for anything else. I hope we can present a viable solution publicly at some point in the future.
- 2
- 2011-08-05
- MikeSchinkel
-
Allora .... chi vuolefarlo?So.... who wants to make this?
- 0
- 2013-02-08
- Dave Kiss
-
per chiunque cerchi,sembra che questa stessaidea sia disponibile comeplugin: https://wordpress.org/plugins/query-recorder/for anyone looking, seems this same idea is available as a plugin: https://wordpress.org/plugins/query-recorder/
- 0
- 2019-02-22
- majick
-
- 2014-11-19
Il plug-in di WordPressper la sincronizzazione del database fa un ottimo lavoro di sincronizzazione dei datitra due server.
Perimpostazionepredefinita,sovrascrive TUTTIi dati di destinazione,tuttavia ho appenaimplementato alcunimiglioramenti alplug-in che consentono di sincronizzare solotabelle di database specifiche. Questopuò aiutarti a conservare commenti,utentie altri dati simili chenon desideri vengano sovrascritti. Questoti dà lagranularità di cui haibisogno?
Non ho ancora rilasciatopubblicamente lemie modifiche,ma se seiinteressato a una copia,inviami un'e-mail a simon-at-yump.com.au. Se qualcuno lotrova utile o ha richieste difunzionalità aggiuntive,fammelo saperee vedrò cosapossofare.
AGGIORNAMENTO: ho appenatrovato ancheil Plugin WP-Sync-DB ,che è unfork delplug-in commerciale WP-Migrate-DB-Pro . Fa una cosamolto simile,anche seprobabilmente hapiù rifinitura di Database Sync .
The Database Sync WordPress plugin does a great job of syncing data between two servers.
By default it overwrites ALL destination data, however I've just implemented some enhancements to the plugin which allow you to only sync specific database tables. This can help you retain comments, users and other such data that you don't want overwritten. Does that give you the granularity that you need?
I haven't released my changes to the public yet, but if you're interested in a copy, send me an email at simon-at-yump.com.au. If anyone finds this useful or has additional feature requests, let me know and I'll see what I can do.
UPDATE: I've also just found the WP-Sync-DB plugin, which is a fork of the commercial WP-Migrate-DB-Pro plugin. It does a very similar thing, although probably has more polish than Database Sync.
-
- 2011-08-04
Esiste un servizio commerciale relativamentenuovo appositamenteper questo compito.Si chiama RAMPA:
http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress
There is a relatively new commercial service specifically for this task. It's called RAMP:
http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress
-
Ci sono limitazioni a quel servizio che lo rendononon adatto almio caso d'uso:There are limitations to that service that make it not fit my use case:
- 1
- 2011-08-04
- marfarma
-
Ilmio caso d'uso: l'aggiunta difunzionalità durante laproduzione aggiunge contenuto.Quote: "I seguentielementinon sono attualmente supportati: Impostazioni (impostazioniprincipalie plug-in,ameno chenon accedano a RAMP)" Il 99,99% delle opzionie impostazioni ditemi eplug-innon verràmigrato.Senzamodifiche al codicein produzione,i post-typepersonalizzatinon verrannomigrati.Dimentica l'aggiunta ditabellepersonalizzatee dei relativi dati.My use case - adding functionality while production adds content. Quote: "The following items are currently unsupported: Settings (core and plugin settings, unless they opt-in to RAMP)" 99.99% of theme and plugin options and settings won't migrate. Without code changes on production, custom post-types won't migrate. Forget about adding custom tables and their data.
- 2
- 2011-08-04
- marfarma
-
Quelprodotto ha un caso d'uso valido:metterein scenail contenutoe poipubblicarlo.Purtropponon è questoilproblema chemi interessa.Tornando all'OP,non è chiaro quale caso d'uso abbia a chefare,quindipotrebbeessere la soluzioneperfettaperil loronegozio.That product does have a valid use-case -- staging content and then pushing it live. Unfortunately that's not the problem I'm concerned with. Checking back to the OP, it's unclear which use case he's dealing with - so it might be the perfect solution for their shop.
- 1
- 2011-08-04
- marfarma
È statagiàposta una domanda su come sincronizzarei filee il databasetra dueinstallazioni di Wordpress.
Peril livello di database,la risposta è di solitofondamentalmente scaricare un databasee inserirlo su un altro server.Ilproblema con questo è chefinisciperperderetutte lemodifiche che sono statepotenzialmente apportate sul server diproduzione.Adesempio,metriche di utilizzo,commenti,ecc ...
Con questoin mente,stavoiniziando a chiedermi sefossepossibileestendere l'ORM di Wordpressin modo dapotergenerare deltae quindiiniettarlinel sito diproduzione.
Qualcuno haprovato,esaminandolo o haidee o commenti?