Erreur de connexion DB après avoir copié une instance WordPress Multisite vers un deuxième emplacement


11

Voici ma configuration. J'ai une instance multisite en cours d'exécution sur http://example.com , et je veux faire du développement et de la mise en scène. Déplacer une instance multisite existante de WP sur localhost est un cauchemar, donc je vais faire du dev sur un emplacement intermédiaire à la place.

J'ai configuré http://staging.example.com pour pointer vers le répertoire / public_html / staging / du compte d'hébergement et j'ai copié tous les fichiers WP de ma racine dans le répertoire / staging /. J'ai également copié les fichiers de base de données (vidage SQL, importé les tables dans une nouvelle base de données) et changé le fichier wp-config.php pour pointer vers la nouvelle base de données.

Après avoir exécuté SQL pour modifier les enregistrements de la base de données, je modifie également cette ligne dans le fichier 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 );

Changé en:

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

Lorsque je charge http://staging.example.com , je reçois ... Error establishing database connection!

J'ai vérifié et revérifié le nom d'utilisateur et le mot de passe, je me suis assuré que l'utilisateur a tous les privilèges sur la nouvelle base de données de transfert, et j'ai laissé le DBHOST en tant que 'localhost' (bien que le changer en staging.example.com ne l'ait pas fait aide non plus).

Pourquoi la connexion à la base de données échouerait-elle? N'importe qui? (Merci d'avance pour votre aide.)

NB: http://example.com fonctionne très bien avec des paramètres de connexion db très similaires, juste avec une base de données différente, donc ce n'est pas un problème avec le serveur de base de données en panne.


Hmm. Personne, hein? C'est une erreur bizarre, c'est sûr.
Jason Rhodes

J'ai la même erreur lorsque j'essaie de faire la migration du réseau Wordpress sur place - aucun hôte déplacé
Mikko Ohtamaa

D'accord. J'ai traqué divers modes de défaillance et en
ai publié

Réponses:


2

Une pensée - lorsque je vais sur www.example.com/staging/wp-admin, il me redirige automatiquement vers www.example.com/wp-admin

La redirection de staging.example.com vers example.com/staging peut-elle entrer en conflit avec l'installation existante?

MISE À JOUR: il semble que cela pourrait être lié à des problèmes .htaccess et à des références de domaine compliquées dans la base de données

Du WP Codex:

Déplacement de WordPress Multisite

Le multisite est beaucoup plus compliqué à déplacer, car la base de données elle-même a plusieurs références au nom du serveur ainsi qu'aux emplacements des dossiers.

La meilleure façon de déplacer Multisite consiste à déplacer les fichiers, à modifier le fichier .htaccess et wp-config.php (si le nom du dossier contenant Multisite a changé), puis à modifier manuellement la base de données. Recherchez toutes les instances de votre nom de domaine et modifiez-les si nécessaire. Cette étape ne peut pas encore être facilement automatisée. Si vous déplacez Multisite d'un dossier à un autre, vous devrez vous assurer de modifier les entrées wp_blogs pour modifier correctement le nom du dossier.


11

Je l'ai résolu et cela a fonctionné :)

Dans le wp_blogstableau,

L'ancienne structure était

Domain : localhost/smart_facility_linux
Path : /

Mais je l'ai changé pour le faire fonctionner comme suit:

Pour le site racine:

Domain : localhost
Path : /smart_facility_linux/

Pour le sous-site 1 (tout sous-site sous le site principal, je viens de donner un exemple):

Domain : localhost
Path : /smart_facility_linux/subsite1/

Malheureusement, cela n'a pas fonctionné pour moi. Ceci est un parfait exemple de la stupidité de l'utilisation de chemins absolus dans la base de données pour WP.
Pegues

@Pegues, cela a fonctionné pour plus de 10 personnes ici :)
Pratik

1
Je suis heureux que cela ait fonctionné pour les autres. Cela ne fonctionne pas pour un grand nombre de personnes - et d'après ce que j'ai recherché, c'est parce qu'il y a une différence dans les valeurs db lors du passage d'un sous-domaine à un sous-répertoire. Et à mon premier commentaire, l'utilisation de chemins absolus n'est pas judicieuse par WP. Cela n'a jamais été et est la cause de tant de problèmes. Et la mise en place d'un flux de travail approprié avec le pipeline CI / CD n'est pas vraiment possible au niveau de l'entreprise.
Pegues

2

Il n'y a vraiment qu'une seule façon de faire un transfert facile de domaine ou d'hôte que j'ai trouvé. Cela fonctionne parfaitement pour moi sur des installations simples et multisites.

  1. Exportez votre base de données dans un fichier .sql. (J'utilise PHPMyAdmin pour cela)
  2. Créez une nouvelle copie du fichier à modifier avec un nom légèrement différent.
  3. Ouvrez le fichier dans votre éditeur de texte préféré> (gedit par exemple)
  4. Exécutez une recherche / remplacement sur le domaine ET le chemin absolu (/ home / username / public_html / to / home / username / public_html /) de la production au développement.
  5. Enregistrez le fichier.
  6. Copiez l'installation complète dans votre répertoire de développement.
  7. Ajoutez la ligne suivante à votre fichier wp-config.php:

    define ('RELOCATE', true);

  8. Connectez-vous et enregistrez vos paramètres de permaliens.

  9. Supprimez la règle de définition que vous mettez dans votre wp-config.php.


1
Cela fonctionne bien, sauf si vous finissez par remplacer une chaîne dans des données sérialisées, comme un widget ou une option de thème, par une chaîne de longueur différente. Les données sérialisées ressemblent à ceci: 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 '(note: les longueurs 76 et 70 ne correspondent plus aux chaînes présentées - j'ai édité les détails de mon site et je n'ai pas gardé la trace du nouveau nombre de caractères.) La seule solution pour cela est pour mettre à jour manuellement les décomptes - ou conserver la même longueur de domaine intermédiaire.
marfarma

J'ai également remplacé tt par xx afin que les URL ne soient pas masquées - vous ne pouviez pas voir la différence entre elles.
marfarma

C'est bon à savoir. Cela signifie que nous devrions au moins prendre le temps de parcourir toutes les entrées telles qu'elles sont trouvées et remplacées au lieu de tout remplacer.
Jeff Sebring

1
Vous pouvez utiliser ce script pour rechercher / remplacer des données sérialisées: interconnectit.com/products/…
Costa
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.