Synchronisation de la base de données Wordpress entre le développement et la production
-
-
J'ai étudié la question,oui,maisje n'aipas accompligrand chose.Si vouspouviezindiquer unepreuve de concept avec une autreplate-forme CMS,je suis sûr quenouspourrions la réorganiserpour 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
-
Et la réplication?How about replication?
- 0
- 2011-08-02
- kovshenin
-
La réplication avecmysqlnécessiterait uneforme de réplicationmaître-maître quiest un PITA.Si voustenez compte dufait que cela se situeentre le développementet laproduction,la réplication devrait être retardée,ce qui seraitprobablementinterromputout letemps.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 réponses
- votes
-
- 2011-08-04
La réalitéest que ce quenous voulons,c'est ceci: http://www.liquibase.org/
Liquibaseest un open source (sous licence Apache 2.0), bibliothèqueindépendante de labase de donnéespour le suivi,lagestionet l'application modifications de labase de données. Ilest construit sur unprincipe simple:toute labase de données lesmodifications sont stockées sous uneforme lisiblepar l'hommemaistraçableet vérifiées dans le contrôle de code source.
Cependant,notreprocessus de développementne leprendpasen charge. Nousne modifionsgénéralementpas labase de données via des scripts discrets quenous écrivonsnous-mêmes,nous utilisons desplugins quenous activons. Nousn'écrivonspas de scripts DMLpourmodifier les données de recherche quenous archivonsensuite dans le contrôle du code source,nous utilisons uneinterface utilisateur sur lapage d'administrationet n'avons doncpas de code sourcepour une utilisation ultérieure lors de la réplication de ce changementpendant lamigration.
Cependant,nouspouvonsen émuler unepartie -en utilisant certains des outils répertoriés sur cettepage:
https://stackoverflow.com/q/225772/149060
Parexemple,liquidbase a unefonction de comparaison quiinclut également desmodifications de données. Nouspourrions,potentiellement,sortir le schémaet les données diff dans un script,en excluant (autant quepossible) certainestables susceptibles d'inclure des données detest (ex:post,etc.)et ensuite appliquer le script à labase de données deproduction.
MySQLDiff (discuté dans la question StackOverflow)fait des différences de schéma,et son auteur recommande mysql_coldiff pour les différences de donnéespartable - les deux sontimplémentéesen perl,si les outilsjava (liquidbase) sonttrop lourdsen ressourcespour vos serveurs -bien que ramener les deuxbases de donnéesen localet exécuter l'outil sur votre PC résout ceproblème ...
Sinous voulons vraimentfaire les choses correctement,nous devonsenregistrertout SQL relatif auxparamètres,options ou autresmodifications de configuration,et tout changement de schéma -et convertir le codejournaliséen script demigrationpourjouer contrenotre serveur deproduction . Jouez le script demigration contre le serveur,copiez lesfichiers du site wordpress (à l'exclusion destéléchargements,le cas échéant)et nous sommesen or.
Ilme semble donc que lemeilleurmoyen de sortirest lepluginmigration-builder-plugin d'un développeur quipiège le sql dontnous avonsbesoin,le stockepuisgénère un script demigration àpartir du codeenregistré,plutôt que de créer unmoyenpourfusionner lesbases de donnéesentre lapréparationet laproduction. Cela semble aussi unproblèmeplus simple à résoudre.
Sinous regardons le code duplugin d'appels de hook d'instrumentation de @bueltgepour l'inspiration: https://gist .github.com/1000143 (merci à Ron Rennick via G + dem'avoirpointé dans la direction de SAVEQUERIESet du crochet d'arrêt,quim'ont amené à letrouver)
-modifiez-lepour obtenir la sortie SAVEQUERIES à laplace -ne s'exécuter qu'en administrateur -filtrertoutes les sélections -enregistrer les résultats dans latable dans le crochet d'arrêt -nouspourrionsbasculer sélectivement letrapping de sortieen fonction de ce quenousfaisionsen cemoment.
Parexemple:
Nom de la capture: activez & amp; Configurer leplugin XYZ
Activer/désactiver l'état de la capture
...installeret configurer leplugin XYZ
Activer/désactiver l'état de capture
Exporter le script demigrationpour: activer & amp; Configurer leplugin XYZ
Appuyez sur lebouton Exporter -pourproduire un champ detexte contextuel avec le SQLpiégéfiltré -idéalementpré-formaté comme un script shell avec un appelen ligne de commande àmysql. Copier & amp; collez-le dans votre dossier de code demigrationet ajoutez-le à votre référentiel de code source.
Une attentionparticulière à l'activationet la désactivation de la capturependant que voustravaillezet vous serezen mesure degénérer le script demigrationparfaitpour amener votrebase de données deproduction à une configuration équivalente à votrebase de donnéesintermédiaire.
Quoi demieux,vous aurez un script (ou une série dumême) que vouspourrez TESTER. Imagerie ayant des scripts demigration réplicableset testables !!
Je suis déjà amoureux.
Quelqu'un d'autre?
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?
-
Belle rédaction.J'aipassébeaucoup detemps sur ceproblèmeparce quej'ai des clients qui recherchentnotre aide.C'est unproblème vraiment difficile,maisnous avons décidé que descendre auniveau de SQLestprobablement unetropgrande solution * "bouillir l'océan" *,ce qui signifie que les chances de lefairefonctionner à 100% sontpeuprobables.Jepense que la solution consiste à utiliser une approche * «diviser-pour-conquérir» * avec un codeexplicite qui comprend la structure de WordPress,et quifournit des crochetspourtout le reste.J'espère quenouspourronsprésenterpubliquement une solution viable à unmoment donné dans lefutur.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
-
Alors ... qui veutfaire ça?So.... who wants to make this?
- 0
- 2013-02-08
- Dave Kiss
-
pourtous ceux qui cherchent,il semble que cettemêmeidée soit disponible sousforme deplugin: 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
Leplugin WordPress Database Sync fait unexcellenttravail de synchronisation des donnéesentre deux serveurs.
Par défaut,il écrase TOUTES les données de destination,maisje viens demettreen œuvre quelques améliorations auplugin qui vouspermettent de synchroniser uniquement destables debase de données spécifiques. Celapeut vous aider à conserver les commentaires,les utilisateurset d'autres données similaires que vousne voulezpas écraser. Cela vous donne-t-il lagranularité dont vous avezbesoin?
Jen'aipasencore rendupublicmesmodifications,mais si vous êtesintéressépar une copie,envoyez-moi une-mail à simon-at-yump.com.au. Si quelqu'untrouve cela utile ou a des demandes defonctionnalités supplémentaires,faites-lemoi savoiret je verrai ce queje peuxfaire.
MISE À JOUR: je viens également detrouver le Plug-in WP-Sync-DB ,quiest unfork duplug-in commercial WP-Migrate-DB-Pro . Ilfait une chosetrès similaire,même s'ilestprobablementpluspoli que 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
Ilexiste un service commercial relativementnouveau spécifiquementpour cettetâche.Ça s'appelle RAMP:
http://alexking.org/blog/2011/07/20/rampe-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
-
Il y a des limitations à ce service quine correspondentpas àmon cas d'utilisation:There are limitations to that service that make it not fit my use case:
- 1
- 2011-08-04
- marfarma
-
Mon cas d'utilisation - ajouter desfonctionnalitéspendant que laproduction ajoute du contenu.Citation: "Les éléments suivantsne sont actuellementpasprisen charge: Paramètres (paramètres debaseet deplug-in,sauf s'ils optentpour RAMP)" 99,99% des optionset paramètres dethèmeet deplug-inne migrerontpas.Sansmodifications de codeen production,lespost-typespersonnalisésne migrerontpas.Oubliez l'ajout detableauxpersonnaliséset de leurs données.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
-
Ceproduit a un cas d'utilisation valide:mettreen scène le contenu,puis le diffuseren direct.Cen'estmalheureusementpas leproblème quime préoccupe.En revenant à l'OP,onne saitpas à quel cas d'utilisationil a affaire - celapourrait donc être la solutionparfaitepour leurboutique.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
Une question a déjà étéposée sur lafaçon de synchroniser lesfichiers ainsi que labase de donnéesentre deuxinstallations Wordpress.
Pour leniveau de labase de données,la réponseestgénéralement de vider unebase de donnéeset de l'insérer sur un autre serveur.Leproblème avec ceciest que vousfinissezparperdretoutes lesmodifications qui ont étépotentiellement apportées sur le serveurprod.Parexemple,lesmétriques d'utilisation,les commentaires,etc ...
Dans cetesprit,je commençais àme demander s'il seraitpossible d'étendre l'ORM Wordpress afin que vouspuissiezgénérer des deltaspuis lesinjecter dans le site deproduction.
Quelqu'un a-t-ilessayé cela,l'a-t-ilexaminé ou a-t-il desidées ou des commentaires?