DB-Verbindungsfehler nach dem Kopieren einer WordPress Multisite-Instanz an einen zweiten Speicherort


11

Hier ist mein Setup. Ich habe eine Multisite-Instanz unter http://example.com und möchte Entwicklung und Staging durchführen. Das Verschieben einer vorhandenen Multisite-Instanz von WP auf localhost ist ein Albtraum, daher werde ich stattdessen Entwickler an einem Staging-Standort ausführen.

Ich habe http://staging.example.com so eingerichtet, dass es auf das Verzeichnis / public_html / staging / des Hosting-Kontos verweist, und alle WP-Dateien von meinem Stammverzeichnis in das Verzeichnis / staging / kopiert. Ich habe auch die Datenbankdateien kopiert (SQL-Dump, die Tabellen in eine neue Datenbank importiert) und die Datei wp-config.php so geändert, dass sie auf die neue Datenbank verweist.

Nachdem ich SQL ausgeführt habe, um die Datenbankeinträge zu ändern, ändere ich auch diese eine Zeile in der Datei wp-config.php:

/** Turning on WordPress MU, new in 3.0 */
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'example.com' ); // <- I change this line
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

Gewechselt zu:

define( 'DOMAIN_CURRENT_SITE', 'staging.example.com' ); // <- now changed

Wenn ich http://staging.example.com lade , bekomme ich ... Error establishing database connection!

Ich habe den Benutzernamen und das Kennwort überprüft und dreifach überprüft, sichergestellt, dass der Benutzer über alle Berechtigungen für die neue Staging-Datenbank verfügt, und den DBHOST als 'localhost' belassen (obwohl dies nicht in staging.example.com geändert wurde) Hilfe auch).

Warum sollte die Datenbankverbindung fehlschlagen? Jemand? (Danke im Vorraus für deine Hilfe.)

NB: http://example.com funktioniert einwandfrei mit sehr ähnlichen Einstellungen für die Datenbankverbindung, nur mit einer anderen Datenbank. Es ist also kein Problem, wenn der Datenbankserver nicht verfügbar ist.


Hmm. Niemand, was? Es ist sicher ein seltsamer Fehler.
Jason Rhodes

Ich habe den gleichen Fehler beim Versuch, die Wordpress-Netzwerkmigration
direkt

In Ordnung. Ich habe verschiedene Fehlermodi aufgespürt und einen Blog-Beitrag darüber verfasst: opensourcehacker.com/2011/08/22/…
Mikko Ohtamaa

Antworten:


2

Ein Gedanke: Wenn ich zu www.example.com/staging/wp-admin gehe, werde ich automatisch zu www.example.com/wp-admin weitergeleitet

Könnte die Umleitung von staging.example.com zu example.com/staging mit der vorhandenen Installation in Konflikt stehen?

UPDATE: Es sieht so aus, als könnte es mit .htaccess-Problemen und komplizierten Domänenreferenzen in der Datenbank zusammenhängen

Aus dem WP Codex:

WordPress Multisite verschieben

Das Verschieben von Multisite ist weitaus komplizierter, da die Datenbank selbst mehrere Verweise auf den Servernamen sowie die Ordnerpositionen enthält.

Der beste Weg, um Multisite zu verschieben, besteht darin, die Dateien zu verschieben, die Datei .htaccess und wp-config.php zu bearbeiten (wenn sich der Ordnername mit Multisite geändert hat) und die Datenbank dann manuell zu bearbeiten. Suchen Sie nach allen Instanzen Ihres Domainnamens und ändern Sie sie nach Bedarf. Dieser Schritt kann noch nicht einfach automatisiert werden. Wenn Sie Multisite von einem Ordner in einen anderen verschieben, müssen Sie sicherstellen, dass Sie die Einträge wp_blogs bearbeiten, um den Ordnernamen korrekt zu ändern.


11

Ich habe es gelöst und es hat funktioniert :)

In der wp_blogsTabelle

Alte Struktur war

Domain : localhost/smart_facility_linux
Path : /

Aber ich habe es so geändert, dass es wie folgt funktioniert:

Für die Root-Site:

Domain : localhost
Path : /smart_facility_linux/

Für Unterwebsite 1 (jede Unterwebsite unter Hauptwebsite habe ich nur ein Beispiel gegeben):

Domain : localhost
Path : /smart_facility_linux/subsite1/

Hat bei mir leider nicht funktioniert. Dies ist ein perfektes Beispiel für die Dummheit, absolute Pfade in der Datenbank für WP zu verwenden.
Pegues

@ Pegues es hat für 10+ Leute hier
funktioniert

1
Ich bin froh, dass es für andere funktioniert hat. Dies funktioniert bei sehr vielen Menschen nicht - und was ich untersucht habe, liegt daran, dass es beim Wechsel von der Subdomain zum Subverzeichnis einen Unterschied in den Datenbankwerten gibt. Und zu meinem ersten Kommentar ist die Verwendung absoluter Pfade für WP nicht sinnvoll. Nie war und ist die Ursache für so viele Probleme. Das Einrichten eines ordnungsgemäßen Workflows mit der CI / CD-Pipeline ist auf Unternehmensebene nicht wirklich möglich.
Pegues

2

Es gibt wirklich nur einen Weg, um eine einfache Übertragung von Domain oder Host durchzuführen, die ich gefunden habe. Bei Single- und Multisite-Installationen funktioniert es einwandfrei.

  1. Exportieren Sie Ihre Datenbank in eine SQL-Datei. (Ich benutze PHPMyAdmin dafür)
  2. Erstellen Sie eine neue Kopie der zu bearbeitenden Datei mit einem etwas anderen Namen.
  3. Öffnen Sie die Datei in Ihrem bevorzugten Texteditor> (z. B. gedit)
  4. Führen Sie ein Suchen / Ersetzen in der Domäne UND im absoluten Pfad (/ home / Benutzername / public_html / zu / home / Benutzername / public_html /) von der Produktion zu dev aus.
  5. Speicher die Datei.
  6. Kopieren Sie die gesamte Installation in Ihr Entwicklungsverzeichnis.
  7. Fügen Sie Ihrer wp-config.php-Datei die folgende Zeile hinzu:

    define ('RELOCATE', true);

  8. Melden Sie sich an und speichern Sie Ihre Permalink-Einstellungen.

  9. Entfernen Sie die Definitionsregel, die Sie in Ihre wp-config.php eingefügt haben.


1
Dies funktioniert einwandfrei, es sei denn, Sie ersetzen eine Zeichenfolge in serialisierten Daten, z. B. einem Widget oder einer Designoption, durch eine Zeichenfolge mit unterschiedlicher Länge. Die serialisierten Daten sehen folgendermaßen aus: s: 76: "hxxp: //www-dev.example.com/wp-content/uploads/company_logo_swoosh.gif 's: 70:" hxxp: //www.example.com/ wp-content / uploads / company_logo_swoosh.gif '(Hinweis: Die Längen 76 und 70 entsprechen nicht mehr den dargestellten Zeichenfolgen - ich habe meine Site-Details bearbeitet und die Anzahl der neuen Zeichen nicht nachverfolgt.) Die einzige Lösung dafür ist um die Anzahl manuell zu aktualisieren - oder die Länge der Staging-Domäne gleich zu halten.
Marfarma

Ich habe tt auch durch xx ersetzt, damit die URLs nicht verdeckt werden - Sie konnten den Unterschied zwischen ihnen nicht erkennen.
Marfarma

Das ist gut zu wissen. Dies bedeutet, dass wir uns zumindest die Zeit nehmen sollten, alle gefundenen und ersetzten Einträge durchzugehen, anstatt alle zu ersetzen.
Jeff Sebring

1
Sie können dieses Skript verwenden, um serialisierte Daten zu suchen / zu ersetzen: interconnectit.com/products/…
Costa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.