Wie ersetze ich den Domainnamen in einer Wordpress-Datenbank?

12

Ich habe eine Wordpress-Datenbank, die in einer Entwicklungsumgebung installiert wurde. Daher haben alle Verweise auf die Site selbst eine feste IP-Adresse (z. B. 192.168.16.2). Jetzt muss ich diese Datenbank auf eine neue Wordpress-Installation auf einem Hosting migrieren. Das Problem ist, dass der SQL-Speicherauszug viele Verweise auf die IP-Adresse enthält und ich sie ersetzen muss durch: my_domain.com.

Ich könnte sedoder einen anderen Befehl verwenden, um das über die Befehlszeile zu ändern. Das Problem ist, dass es viele Konfigurationsdaten gibt, die JSON verwenden. Na und? Wie Sie wissen, verwenden JSON-Arrays Dinge wie: s:4:Um zu wissen, wie viele Zeichen ein Element hat, und wenn ich nur die IP durch den Domänennamen ersetze, werden die Konfigurationsdateien beschädigt.

Ich habe vor einigen Jahren eine App für Windows verwendet, mit der Werte in einer Datenbank geändert werden können und die sich um die JSON-Arrays kümmert. Leider habe ich den Namen der App vergessen ... die Frage ist also: Kennen Sie eine App, mit der ich tun kann, was ich will?

Cristian
quelle
1
Dies ist keine vollständige Antwort, kann Ihnen jedoch bei der Suche nach einer Antwort helfen: Die Daten, die Sie betrachten, sind nicht JSON-formatiert. JSON speichert solche Werttypen und -längen (normalerweise) nicht. Was Sie sehen, sind SERIALISIERTE Daten. Eine Google-Suche nach "MySQL ersetzen serialisiert" ergibt diese Seite, die helfen könnte: davidcoveney.com/…
MathSmath
Hey, dein Kommentar ist die einzige Antwort, die für mich nützlich war ... verschiebe ihn zu einer Antwort, um ihn als richtig zu markieren. Vielen Dank!
Cristian
Ich bin froh, dass es geholfen hat! Ich habe es als Antwort gepostet.
MathSmath

Antworten:

7

Die Daten, die Sie anzeigen, sind nicht JSON-formatiert. JSON speichert solche Werttypen und -längen (normalerweise) nicht. Was Sie sehen, sind SERIALISIERTE Daten. Eine Google-Suche nach "MySQL ersetzen serialisiert" ergibt diese Seite, die hilfreich sein könnte: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/

MathSmath
quelle
Danke ... Ich habe 2 Jahre als PHP-Entwickler gearbeitet. Ich kann nicht glauben, dass ich den Unterschied zwischen etwas Serialisiertem und einem JSON-String vergessen habe.
Cristian
8

Codex hat eine anständige Anleitung - Ändern der Site-URL .

Grundsätzlich gibt es mehrere Stellen, an denen URL wichtig ist oder nicht so sehr (ich vermisse möglicherweise einige):

  • homeund siteurlOptionen, die steuern, wo WP denkt, dass sich die Site befindet;
  • Nach GUIDs sehen diese wie Links aus, sind es aber nicht - nur Bezeichner. Ich bin mir nicht sicher, ob sie irrelevant sind, aber ich habe die URLs auf dem Teststapel häufig geändert und mich nie darum gekümmert, diese zu aktualisieren.
  • Links in Postkörpern;
  • möglicherweise Links in Plugin-Einstellungen.
Selten
quelle
Es gibt einige Schritte. Nachdem Sie mv olddir.com newdir.comIhren Webserver neu konfiguriert haben, starten Sie den Webserver neu. Befolgen Sie die Codex-Anweisungen hier und dann sollten Sie sich als Administrator anmelden können. Damit sollten Sie loslegen :-)
PJ Brunet
6

Wie Rarst oben sagte, gibt es nur zwei Einstellungen in der Datenbank, die geändert werden müssen. Nach dem Import der Datenbank melde ich mich bei PHPMyAdmin an und bearbeite die Datenbank direkt.

Ich verwende ständig einen Entwicklungsserver auf meinem PC, um Datenfeeds zu importieren, und die URL ist an die Posts gemäß http: // localhost / testsite / post-name / angehängt, und es wurde nie ein Problem verursacht.

Früher habe ich eine SQL-Suche verwendet und ersetzt, bis mir klar wurde, dass es keine Rolle spielt. Ich habe einige Websites von einer Domain in eine andere migriert und wo ich absolute URLs im Inhalt hatte, verwende ich die SQL-Such- und Ersetzungsoption.

update wp_posts set post_content = replace(post_content,'http://www.olddomain/','http://www.newdomain/');

David

David Law
quelle
Es gibt einige Plugins wie ContactForm7, die neben anderen Konfigurationsvariablen auch den Domänennamen in einer serialisierten Zeichenfolge speichern. Wenn Sie eine serialisierte Zeichenfolge ändern, kann sie beschädigt werden, wenn sich ihre Länge ändert. Daher müssen manchmal mehr Dinge geändert werden als nur zwei Einstellungen.
Cristian
3

Sie können diese Werte mit Konstanten in der wp-config.php. Danach können Sie jederzeit die Einträge in der Datenbank über das Plugin Adminer ändern. Schreiben Sie dies in die wp-config.phpund die Werte in der DB sind nicht relevant:

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');
bueltge
quelle
2

Einfache SQL-Abfragen - keine komplizierten REPLACE-Aufgaben erforderlich:

update wp_options set option_value = 'http://mynewdomain.com' where option_name = 'siteurl';

update wp_options set option_value = 'http://mynewdomain.com' where option_name = 'home';

Verwenden Sie diese mit PHPMyAdmin oder auf eine andere Weise, die Sie bevorzugen, um auf die Datenbank zuzugreifen.

Kennzeichen
quelle
2

Stellen Sie sicher, dass Sie die neue Datenbank ausgewählt haben, und führen Sie dann einige SQL-Aktualisierungen und Ersetzungsbefehle für die Tabellen aus, insbesondere wp_options, wp_posts, wp_postmeta.

Verwenden Sie den folgenden Code und tauschen Sie Ihre alten und neuen URLs ohne nachgestellte Schrägstriche aus. Ändern Sie gegebenenfalls auch die Tabellenpräfixwerte (z. B. wp_).

UPDATE wp_options SET option_value = replace(option_value, 'http_www.oldurl', 'http_www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl';    
UPDATE wp_posts SET guid = replace(guid, 'http_www.oldurl','http_www.newurl');    
UPDATE wp_posts SET post_content = replace(post_content, 'http_www.oldurl', 'http_www.newurl');    
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http_www.oldurl','http_www.newurl');
user129645
quelle
1

Dies ist eine sehr alte Frage, aber da ich auf der Suche nach etwas anderem darauf gestoßen bin, dachte ich, ich würde dies als zukünftige Referenz hinzufügen.

Ich denke, der einfachste und vollständigste Weg, dies zu tun, ist die Verwendung von searchreplacedb2.php. Sie finden es hier: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ sowie eine Erläuterung seiner Verwendung.

Es hat mir definitiv viel Zeit bei der Migration von Entwicklern zu Live-Umgebungen auf meinen WordPress-Sites gespart.

Stellen Sie einfach sicher, dass Sie es von einem öffentlichen Server löschen, nachdem Sie fertig sind!

MatthewLee
quelle