2009-09-18 11 views
5

Ich habe in den Wordpress-Foren über diese und sah nichts gefunden, also dachte ich, ich könnte hier versuchen.Wordpress-Datenbank Migration

Wenn Sie über ein Staging/dev Wordpress-Setup verfügen, das zum Testen neuer Plug-Ins verwendet wird, wie gehen Sie vor, die Daten in der Staging-Datenbank zurück in die Produktionsdatenbank zu migrieren? Gibt es dafür eine "Wordpress Best Practices" -Methode, oder muss ich manuell Tabellen von einer Datenbank auf die andere migrieren?

Antwort

1

Vielleicht suchen Sie nur nach dem Falschen. Würde ein Backup-Plugin dies nicht einfach handhaben? Ich weiß, dass sie für alle großen CMS-Pakete existieren ...

1

Die beiden Methoden würden die Export/Import-Funktion unter Tools oder das Kopieren der Datenbank verwenden. Ich maile mir wöchentlich eine Kopie meiner Produktionsdatenbank mit dem WordPress Database Backup Plugin.

Die Import-Funktion kann problematisch sein, wenn Sie ein Wordpress-Blog verschieben, da Sie Ihre php.ini-Datei häufig konfigurieren müssen, da der Standardwert von Dateien, die Sie auf eine gehostete PHP-Implementierung hochladen können, standardmäßig zu klein ist.

1

Ich wollte die Datenbank von meiner Produktion Wordpress-Website in eine Offline-Entwicklung Kopie davon auf meinem Desktop-Rechner, so dass ich die Website ändern und testen Sie mit einem vollständigen Satz der vorhandenen Blog-Inhalt und Geschichte.

Dies erwies sich als problematisch, da es einfach nicht funktionierte, eine Offlinesicherung der Datenbank zu erstellen und sie in die lokale Entwicklungsdatenbank zu importieren.

Die Überwindung dieser Probleme beim Verschieben von Daten aus der Produktion in die Entwicklungsdatenbank kann wahrscheinlich auch umgekehrt verwendet werden - also denke ich, dass Sie diese Richtlinien auch für das verwenden können, was Sie auch tun möchten Dev-Daten und verschiebe es zu prod.

Die Probleme hier waren:

  1. die Permalink Bezeichnungen für die Blog-Posts alle in der Datenbank gespeichert werden, wie sie für die Online-Version sein würden, aber meine Offline-Kopie nicht das ist Domain-Adresse, stattdessen ist es im Verzeichnis localhost. So wenn ich die Website lokal starten, obwohl die CSS-Formatierung und Bilder sind alle an Ort und Stelle (das Bild Links sind relativ), die tatsächlichen Blog-Beiträge nicht angezeigt.
  2. viele der Links auf der ganzen Website Link aus dem Internet zurück, also, wenn Sie versuchen, Archive, oder Kommentare oder Kategorien oder die wichtigsten Beiträge zu navigieren, Sie heraus gelangen zurück an das Internet gesendet anstatt in der Datenbank auf dem lokalen Rechner zu bleiben.

Um sicherzustellen, dass ich das richtig gemacht habe, blies ich die Wordpress-Installation weg, die ich auf meinem lokalen Rechner hatte, und startete von vorne.

Einmal hatte ich eine saubere, neue Wordpress installieren und brandneuer Standard frisch lokale Datenbank für sie geschaffen, öffnete ich die Datenbank in phpMyAdmin auf und nahm einen Blick auf dem wp_posts

Tisch.Im Inneren hat jeder Datensatz (mit anderen Worten, jeder Beitrag) eine Spalte mit dem Titel "guid", die den Ort dieses Beitrags anzeigt. Zum Beispiel ist die erste in einer frischen, default

installieren enthält dieses „guid“ Wert:

http://localhost/wordpress/?p=1 

Wenn Sie in der wp_posts Tabelle Ihrer Online-Version anschauen, werden Sie stattdessen in diesem Ort sehen die URL zu Ihrer Website online.

Sie können nicht einfach die Tabellen Großhandel in Ihre lokale Installation importieren, weil Sie alle diese externen Referenzen importieren werden. Es wird Ihre lokale Version unmöglich machen, lokal zu navigieren.

Also habe ich eine Sicherungskopie der Datenbank meiner Online-Site erstellt und lokal als .sql-Datei gespeichert. Ich habe dann diese Datei in einem Texteditor geöffnet (ich habe Notepad ++ benutzt, ein großartiges Stück freier Software, aber Sie könnten einen beliebigen Texteditor verwenden). Dinge, die ich brauchte zu achten ist:

  • Aus welchem ​​Grund auch immer, werden die Tabellen auf meiner Online-Seite nicht nur zum Beispiel „wp_posts“ - sie „wp_something_posts“ sind ... es gibt einige extra Buchstaben drin in den Tabellennamen.
  • Verweise auf http: // ..., die meine Online-URL enthalten anstelle von localhost/Wordpress

Damit ist es einfach tun lassen gerade nur die Beiträge. Suchen Sie in der Sicherungskopie der .sql, die Sie aus Ihrer Online-Datenbank erstellt haben, den Anfang der Tabelle wp_posts. Es sieht ungefähr so ​​aus:

-- 

-- Table structure for table `wp_posts` 

-- 



DROP TABLE IF EXISTS `wp_posts`; 

CREATE TABLE `wp_posts` (

... und so weiter. Markieren Sie alles oberhalb des Kommentars, der den Anfang der Datenbank am Anfang der Datei markiert (es wird sagen: Datenbank: 'Ihr Datenbankname') und löschen Sie es. Dann gehe zum Ende deiner wp_posts-Tabelle und lösche alles nach dem Ende bis zum Ende der Datei. Jetzt enthält Ihre Datei nur Ihre Posts und sonst nichts.

Speichern Sie dies als separates Dokument. Nennen Sie es posts.sql oder so ähnlich.

Jetzt in dieser Datei posts.sql müssen Sie zwei Suchen/Ersetzen Aktionen durchführen.

  1. jede Instanz des Namens finden Sie die Tabelle wp_something_posts und es mit wp_posts ersetzen. Sie müssen nur dies tun, wenn Ihre Sicherungskopie Ihrer Online-Datenbank nicht übereinstimmen Ihre saubere lokale Installation als weit wie die Tabellennamen gehen. Sie wollen , was auch immer der Tabellenname in dieser Datei ist, um zu entsprechen, was Ihre lokal installierte wordpress Datenbank als dieser Tabellenname hat. Wenn Sie nicht diese Namen übereinstimmen, sind Sie nur gehen, um am Ende die Posts in eine neue, anders benannte Tabelle, zu importieren, die Ihnen bei alle nützen wird.
  2. Finden Sie jede Instanz von http: // ... (ersetzen Sie die Elipsis mit Ihrer URL) und ersetzen sie durch http://localhost/wordpress (oder , was die lokale URL zu Ihrer dev Version der Website ist)

nun wieder diese Datei speichern, um sicherzustellen, dass Sie‘ Ich habe diese Änderungen eingestellt.

Jetzt, wo Sie das getan haben, phpMyAdmin in die Wordpress-Datenbank auf dem lokalen Computer zu erhalten, wählen Sie die Registerkarte „Import“ und navigieren Sie den Wähler auf die posts.sql Datei, die Sie gerade gemacht, und dann importieren es. Dadurch werden alle Daten in dieser Datei in Ihre lokale Tabelle wp_posts übernommen.

Wenn dies abgeschlossen ist, durchsuchen Sie Ihre lokale Wordpress-Website. Du wirst jetzt alle deine Posts sehen. Hurra!

Sie müssen möglicherweise etwas ähnliches für ein paar andere Tabellen tun, wenn Sie in Ihren Kommentaren, Tags, Kategorien bringen wollen, und statische Seiten, die Sie erstellt haben, usw.

Ich weiß, das eine wechselhafte Prozess ist . Es gibt wahrscheinlich irgendwo ein Tool, das diese Aktivität erleichtert, und wenn jemand davon weiß, würde ich es gerne erfahren. Wenn jemand einen besseren Weg kennt, dies manuell zu tun als das, was ich beschrieben habe, würde ich das auch gerne wissen!

Bis dahin habe ich auf diese Weise herausgefunden, wie es geht. Hoffentlich hilft es Ihnen, in die richtige Richtung zu gehen.

3

Ich habe ein Skript, das eine Kopie meiner Produktion Wordpress DB mysqldumps, stellt sie wieder her über meine Testwordpress installieren & korrigiert dann alle die „Herstellung“ Einstellungen & Urls im Test DB.

Beide meine Produktion & Test-Datenbanken leben auf dem gleichen Server, aber Sie können die Einstellungen von mysqldump zu Dump von einem remote mysql Server & Wiederherstellung auf einen lokalen Server ziemlich leicht ändern.

Hier sind meine Skripte:

overwrite_test.coach_db_with_coache_db.sh

#!/bin/bash 
dbUser="co*******" 
dbPassword="*****" 
dbSource="coach_production" 
dbDest="coach_test" 
tmpDumpFile="/tmp/$dbSource.sql" 

mysqldump --add-drop-table --extended-insert --user=$dbUser --password=$dbPassword --routines --result-file=$tmpDumpFile $dbSource 
mysql --user=$dbUser --password=$dbPassword $dbDest < $tmpDumpFile 
mysql --user=$dbUser --password=$dbPassword $dbDest < /AdminScripts/change_coach_to_test.coach.sql 

change_coach_to_test.coach.sql

-- Change all db references from @oldDomain to @newDomain 

SET @oldDomain = 'coach.co.za'; 
SET @newDomain = 'test.coach.co.za'; 
SET @testUsersPassword = 'password'; 

UPDATE `wp_1_options` SET `option_value` = REPLACE(`option_value`,@oldDomain,@newDomain) WHERE `option_name` IN ('siteurl','home','fileupload_url'); 
UPDATE `wp_1_posts` SET `post_content` = REPLACE(`post_content`,@oldDomain,@newDomain); 
UPDATE `wp_1_posts` SET `guid` = REPLACE(`guid`,@oldDomain,@newDomain); 
UPDATE `wp_blogs` SET `domain` = @newDomain WHERE `domain` = @oldDomain; 
UPDATE `wp_users` SET `user_pass` = MD5(@testUsersPassword); 

-- Only valid for main wpmu site 
UPDATE `wp_site` SET `domain` = @newDomain WHERE `domain` = @oldDomain; 
0

Hier geht es um fasst die Probleme mit dem Wordpress Core-Architektur ... aber ich schrieb ein Plugin, das das Problem löst ms mit Domain-Namen und absolute URLs in der Datenbank gespeichert werden:

http://wordpress.org/extend/plugins/root-relative-urls/

Dadurch werden die Probleme skizziert durch @oddbill lösen. Bedenken Sie jedoch nicht, dass sich die URL in der GUID-Spalte befindet, da dieses Feld nie für die Linkgenerierung verwendet wird.

@markratledge bietet ein paar Links zu einigen umfangreiche Dokumente, die dies im Grunde sagen:

// Export

mysqldump -u[username] -p[password] [database] > backup.sql

// import

mysql -u[username] -p[password] [database] < backup.sql

Sie über Ich möchte die Kommentare/comments_meta-Tabellen ausschließen, wenn Sie die Produktion aus dem Staging übernehmen verliere nicht alle deine Kommentare und Trackbacks (@ DavidLaings Ansatz löscht diese aus.) Und dies setzt voraus, dass du nur Inhaltsänderungen in deiner Staging-Umgebung machst. Wenn Sie Änderungen in der Produktion und in Ihrer Staging-Umgebung vornehmen möchten, müssen Sie Skripts schreiben, die die Daten synchronisieren, anstatt sie groß zu überschreiben. Viel Glück bei dieser Aufgabe. Ich schlage vor, dass Sie & modifizierte Zeitstempelspalten hinzufügen, bevor Sie investieren zu viel Zeit mit dem aktuellen Schema.

Und schließlich, @ RussellStuever Ansatz ist in den meisten Fällen geeignet, nur sicher sein, zu wissen, wenn Sie Ihre Host zugeordneten Website im Vergleich zu Ihrer Produktionsstätte durchsuchen. Und wirklich sicher sein, da einige Browser DNS-Suchen für Tage cachen, bis Sie sie physisch schließen und einen neuen Prozess starten. An diesem Punkt kann das Wechseln von Hosts einige Zeit in Anspruch nehmen, und ein häufiges Wechseln kann frustrierend sein. Und wenn Sie mit einem iPhone testen müssen, müssen Sie zuerst die Site live veröffentlichen oder einen guten Router verwenden, der ausgehende Internetanforderungen an lokale Server neu zuordnen kann, da Sie die Hosts-Dateien auf den meisten mobilen Geräten nicht ändern können.

Mit meinem Plugin können Sie von http://localhost/ oder http://staging.server.local/ oder http://www.production.com entwickeln und testen, ohne die üblichen Gefahren. Und dann, um Daten zu migrieren, ist es so einfach wie das Exportieren und Importieren der Daten, keine Suche & ersetzen Schritt oder Datenbankeinstellung zwickt notwendig.

Und verlassen Sie sich nicht auf das Import/Export-Tool, es erfasst nicht alles in typischen Wordpress-Installationen und erfordert immer noch eine unnötige Suche & Schritt ersetzen.

0

Sie müssen mit den serialisierten Objekten umgehen. Hier ist ein client side HTML5 utility um es zu handhaben. Weil es alles Javascript ist, ist es ziemlich schnell.

Die Alternative wäre ein Bash-Skript in Ihre Bereitstellung einhängen. Sobald die Site implementiert ist, wird die Datenbank mit der neuen Domäne gesichert und deserialisiert.