Wordpress-Datenbanksynchronisation zwischen dev und prod
-
-
Ich habemich damitbefasst,ja,abernicht vielerreicht.Wenn Sie aufeinen Proof-of-Conceptmit einer anderen CMS-Plattform verweisen könnten,könnten wirihn sicherfür WordPressneu auslösen.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
-
Wie wäreesmit Replikation?How about replication?
- 0
- 2011-08-02
- kovshenin
-
Eine Replikationmit MySQL würdeeine Form der Master-Master-Replikationerfordern,bei deres sich umeine PITA handelt.Wenn Sie die Tatsacheberücksichtigen,dass dies zwischen dev undprod liegt,muss die Replikation verzögert werden,was höchstwahrscheinlich dieganze Zeit unterbrochen wird.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 Antworten
- Stimmen
-
- 2011-08-04
Die Realitätist,dass wir Folgendes wollen: http://www.liquibase.org/
Liquibaseist Open Source (Apache 2.0 Licensed), Datenbankunabhängige Bibliothek zum Verfolgen,Verwalten und Anwenden Datenbankänderungen. Esbasiert aufeinereinfachen Prämisse: Alle Datenbanken Änderungen werdenin einerfür Menschen lesbaren und dennochnachverfolgbaren Formgespeichert und überprüft in die Quellcodeverwaltung.
Unser Entwicklungsprozess unterstützt diesjedochnicht. Wir ändern die Datenbanknormalerweisenicht durch diskrete Skripte,die wir selbst schreiben. Wir verwenden Plugins,die wir aktivieren. Wir schreiben keine DML-Skripte,um Suchdaten zu ändern,die wir dannin die Quellcodeverwaltungeinchecken. Wir verwendeneine Benutzeroberfläche auf der Administrationsseite und haben daher keinen Quellcodefür die spätere Replikation dieser Änderung während der Migration.
Wir könnenjedocheinige davonemulieren -mit einigen der auf dieser Seite aufgeführten Tools:
https://stackoverflow.com/q/225772/149060
Liquidbase verfügtbeispielsweise übereine Diff-Funktion,die optional auch Änderungen an Datenenthält. Wir könntenmöglicherweise das Schema und die Datendifferenzin ein Skript ausgeben,wobei (wiemöglich)bestimmte Tabellen ausgeschlossen werden,die wahrscheinlich Testdatenenthalten (d. H. Post usw.),und das Skript dann auf die Produktionsdatenbank anwenden.
MySQLDiff (in der StackOverflow-Fragebeschrieben)führt Schemadifferenzen aus,und der Autorempfiehlt mysql_coldiff fürtabellenweise Datenunterschiede -beide werdenin Perlimplementiert,wenn Java-Tools (Liquidbase)für Ihre Server zu ressourcenintensiv sind - obwohlbeide Datenbanken lokal sind und das Tool auf Ihrem PC ausgeführt wird,wird dieses Problembehoben ...
Wenn wires wirklich richtigmachen wollen,sollten wir alle SQL-Dateienprotokollieren,die sich auf Einstellungen,Optionen oder andere Konfigurationsänderungen sowie Schemaänderungenbeziehen,und denprotokollierten Codein ein Migrationsskript konvertieren,umihngegen unseren Produktionsserver abzuspielen . Spielen Sie das Migrationsskriptgegen den Server,kopieren Sie die WordPress-Site-Dateien (ggf. ohne Uploads) und wir sind Gold wert.
Meiner Meinungnachist derbeste Ausweg das Migrations-Builder-Plugineines Entwicklers,das diebenötigte SQL abfängt,speichert und dann aus demprotokollierten Codeein Migrationsskriptgeneriert,anstatteinen Ausweg zufinden Datenbanken zwischen Staging und Produktion zusammenführen. Scheint auchein einfacheres Problem zu lösen.
Wenn wir uns den Code von @bueltges Instrumenten-Hook-Call-Plugin ansehen,um Inspiration zuerhalten: https://gist .github.com/1000143 (danke an Ron Rennick über G +,dermichin Richtung SAVEQUERIES und den Abschalthakengezeigt hat,dermich dazugebracht hat,ihn zufinden)
- Ändern Siees,um stattdessen die Ausgabe von SAVEQUERIES zuerhalten - Nurim Admin ausführen - Alle Auswahlen herausfiltern - Speichern Sie die Ergebnissein der Tabelleim Shutdown-Hook - Wir konnten die Ausgabeüberwachungbasierend auf dem,was wirgeradetaten,selektiv umschalten.
Zum Beispiel:
Name der Aufnahme: Aktivieren & amp; Konfigurieren Sie das Plugin XYZ
Capture State Toggle - on
... Plugin XYZinstallieren und konfigurieren
Capture State Toggle - off
Migrationsskriptexportierenfür: Aktivieren & amp; Konfigurieren Sie das Plugin XYZ
Drücken Sie die Export-Taste,umein Popup-Textfeldmit demgefilterten,eingeschlossenen SQL zuerstellen. Idealerweise als Shell-Skriptmit Befehlszeilenaufruffür MySQL vorformatiert. Kopieren & amp; Fügen Sieesin Ihren Migrationscode-Ordnerein undfügen Siees Ihrem Quellcode-Repository hinzu.
Achten Sie darauf,dass Sie die Erfassung während der Arbeitein- und ausschalten,und Sie können dasperfekte Migrationsskripterstellen,um Ihre Produktionsdatenbankin eine Konfiguration zubringen,die Ihrer Staging-Datenbankentspricht.
Wasistbesser,Sie habenein Skript (odereine Reihe davon),das Sietesten können. Imagingmit replizierbaren,testbaren Migrationsskripten !!
Ichbin schon verliebt.
Sonstnochjemand?
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?
-
Schöne Zusammenfassung.Ich habe viel Zeitmit diesem Problem verbracht,weilich Kunden habe,dienach unserer Hilfe suchen.Esistein wirklich schwieriges Problem,aber wir habenentschieden,dasses wahrscheinlich zu viel voneiner * "Boilthe Ocean" * -Lösungist,auf SQL-Ebene zugehen,wasbedeutet,dasses unwahrscheinlichist,dasses zu 100%funktioniert.Ich denke,die Lösungbesteht darin,einen * "Divide-and-Conquer" * -Ansatzmit explizitem Code zu verwenden,der die WordPress-Struktur versteht und Hooksfür alles anderebereitstellt.Ich hoffe,wir könnenirgendwannin der Zukunft öffentlicheine tragfähige Lösungpräsentieren.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
-
Also ... wer will dasmachen?So.... who wants to make this?
- 0
- 2013-02-08
- Dave Kiss
-
Für alle,die suchen,scheint dieselbe Idee als Plugin verfügbar zu sein: 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
Das Datenbank-Synchronisierung WordPress-Plugin leistet hervorragende Arbeit Synchronisieren von Daten zwischen zwei Servern.
Standardmäßig werden ALLE Zieldaten überschrieben. Ich habejedochgeradeeinige Verbesserungen am Pluginimplementiert,mit denen Sienurbestimmte Datenbanktabellen synchronisieren können. Dies kann Ihnen helfen,Kommentare,Benutzer und andere solche Datenbeizubehalten,dienicht überschrieben werden sollen. Gibt Ihnen das die Granularität,die Siebenötigen?
Ich habemeine Änderungennochnicht veröffentlicht,aber wenn Sie aneiner Kopieinteressiert sind,senden Siemireine E-Mail an simon-at-yump.com.au. Wennjemand diesnützlichfindet oder zusätzliche Funktionsanforderungen hat,lassen Sieesmich wissen undich werde sehen,wasichtun kann.
UPDATE: Ich habe auchgerade das gefunden WP-Sync-DB Plugin,eine Abzweigung des kommerziellen WP-Migrate-DB-Pro -Plugins. Esmachteine sehr ähnliche Sache,obwohles wahrscheinlichmehr Glanz als Database Sync hat.
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
Speziellfür diese Aufgabegibt eseinen relativneuen kommerziellen Dienst.Es heißt RAMP:
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
-
Esgibt Einschränkungenfür diesen Dienst,die dazuführen,dassernicht zumeinem Anwendungsfallpasst:There are limitations to that service that make it not fit my use case:
- 1
- 2011-08-04
- marfarma
-
Mein Anwendungsfall - Hinzufügen von Funktionen während der Produktionfügt Inhalte hinzu.Zitat: "Diefolgenden Elemente werden derzeitnicht unterstützt: Einstellungen (Kern- und Plugin-Einstellungen,sofern sie sichnichtfür RAMP anmelden)" 99,99% der Themen- und Plugin-Optionen und -Einstellungen werdennichtmigriert.Ohne Codeänderungenin der Produktion werdenbenutzerdefinierte Post-Typennichtmigriert.Vergessen Sie das Hinzufügen vonbenutzerdefinierten Tabellen und deren Daten.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
-
Dieses Produkt hateinen gültigen Anwendungsfall - Inhaltebereitstellen und dann live übertragen.Leiderist dasnicht das Problem,mit demichmichbefasse.Wenn Sie zum OP zurückkehren,ist unklar,mit welchem Anwendungsfaller sichbefasst - daherist diesmöglicherweise dieperfekte Lösungfür denjeweiligen Shop.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
Es wurdebereitseine Frage zum Synchronisieren von Dateien und der Datenbank zwischen zwei Wordpress-Installationengestellt.
Auf Datenbankebenebesteht die Antwortnormalerweise darin,eine Datenbank zu sichern und aufeinem anderen Servereinzufügen.Das Problem dabeiist,dass Sie am Ende alle Änderungen verlieren,diemöglicherweise auf dem Produktserver vorgenommen wurden.Zum Beispiel Nutzungsmetriken,Kommentare usw.
Vor diesem Hintergrundbegannichmich zufragen,obesmöglich sein würde,das Wordpress-ORM so zuerweitern,dass Sie Deltasgenerieren und diese dannin die Produktseiteinjizieren können.
Hatjemand dies versucht,sich damitbefasst oderirgendwelche Ideen oder Kommentare?