Errore di connessione al database dopo aver copiato un'istanza WordPress Multisite in una seconda posizione
Ecco la mia configurazione. Ho un'istanza Multisite in esecuzione su http://example.com e voglio fare sviluppo e staging. Spostare un'istanza Multisite esistente di WP su localhost è un incubo, quindi farò lo sviluppo su un ambiente di staging.
Ho configurato http://staging.example.com per puntare alla directory /public_html/staging/ dell'account di hosting e ho copiato tutti i file WP dalla mia root nella directory /staging/. Ho anche copiato i file del database (dump SQL, importato le tabelle in un nuovo database) e modificato il file wp-config.php per puntare al nuovo database.
Dopo aver eseguito SQL per modificare i record del database, ho anche cambiato questa riga nel file wp-config.php:
/** Attivazione WordPress MU, novità in 3.0 */
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'example.com' ); // <- Modifico questa riga
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
Modificata in:
define( 'DOMAIN_CURRENT_SITE', 'staging.example.com' ); // <- ora modificata
Quando carico http://staging.example.com, ottengo... Error establishing database connection
!
Ho controllato e ricontrollato username e password, mi sono assicurato che l'utente abbia tutti i privilegi sul nuovo database di staging e ho lasciato DBHOST come 'localhost' (anche se cambiarlo in staging.example.com non ha aiutato).
Perché la connessione al database dovrebbe fallire? Qualcuno può aiutare? (Grazie in anticipo per l'aiuto.)
NB: http://example.com funziona correttamente con impostazioni di connessione al database molto simili, solo con un database diverso, quindi non è un problema di server database non attivo.
L'ho risolto & ha funzionato :)
Nella tabella wp_blogs
,
La vecchia struttura era
Dominio : localhost/smart_facility_linux
Percorso : /
Ma l'ho modificata per farla funzionare come segue:
Per il sito principale:
Dominio : localhost
Percorso : /smart_facility_linux/
Per il sotto-sito 1 (qualsiasi sotto-sito sotto il sito principale, ho dato solo un esempio):
Dominio : localhost
Percorso : /smart_facility_linux/subsite1/

Sfortunatamente non ha funzionato per me. Questo è un perfetto esempio della stupidità di usare percorsi assoluti nel database per WordPress.

Sono contento che abbia funzionato per altri. Questo non funziona per moltissime persone - e da quello che ho ricercato è perché c'è una differenza nei valori del database quando si passa da sottodominio a sottodirectory. E per tornare al mio commento iniziale, l'uso di percorsi assoluti non è saggio in WordPress. Non lo è mai stato, ed è la causa di così tanti problemi. E impostare un flusso di lavoro corretto con una pipeline CI/CD non è realmente possibile a livello enterprise.

Un pensiero - quando vado su www.example.com/staging/wp-admin vengo automaticamente reindirizzato a www.example.com/wp-admin
Potrebbe il reindirizzamento da staging.example.com a example.com/staging essere in conflitto con l'installazione esistente?
AGGIORNAMENTO: sembra che potrebbe essere correlato a problemi con .htaccess e riferimenti complessi al dominio nel database
Dal WP Codex:
Spostare WordPress Multisite
Multisite è molto più complicato da spostare, poiché il database stesso contiene molteplici riferimenti al nome del server così come alle posizioni delle cartelle.
Il modo migliore per spostare Multisite è spostare i file, modificare .htaccess e wp-config.php (se è cambiato il nome della cartella contenente Multisite), e poi modificare manualmente il database. Cerca tutte le istanze del tuo nome di dominio e modificale secondo necessità. Questo passaggio non può ancora essere facilmente automatizzato. Se stai spostando Multisite da una cartella a un'altra, dovrai assicurarti di modificare le voci wp_blogs per cambiare correttamente il nome della cartella.

Ho trovato solo un modo semplice per trasferire un dominio o un host senza problemi. Funziona perfettamente per me sia su installazioni singole che multisito.
- Esporta il tuo database in un file .sql (io uso PHPMyAdmin per questo)
- Crea una nuova copia del file da modificare con un nome leggermente diverso
- Apri il file nel tuo editor di testo preferito (ad esempio gedit)
- Esegui una ricerca/sostituzione sia sul dominio CHE sul percorso assoluto (/home/utente/public_html/ in /home/utente/public_html/) da produzione a sviluppo
- Salva il file
- Copia l'intera installazione nella tua directory di sviluppo
Aggiungi la seguente riga al tuo file wp-config.php:
define('RELOCATE',true);
Accedi e salva le impostazioni dei permalink
Rimuovi la regola define che hai inserito nel tuo wp-config.php

Funziona bene, tranne nel caso in cui si finisca per sostituire una stringa in dati serializzati, come un widget o un'opzione del tema, con una stringa di lunghezza diversa. I dati serializzati hanno questo aspetto - 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' (nota: le lunghezze 76 e 70 non corrispondono più alle stringhe mostrate - ho modificato i dettagli del mio sito senza tenere traccia del nuovo conteggio di caratteri.) L'unica soluzione per questo è aggiornare manualmente i conteggi - oppure mantenere la stessa lunghezza del dominio di staging.

Ho anche sostituito tt con xx in modo che gli URL non fossero oscurati -- non si poteva vedere la differenza tra di loro.

È buono a sapersi. Questo significa che dovremmo almeno prendere il tempo per esaminare tutte le voci mentre vengono trovate e sostituite invece di sostituire tutto in una volta.

Puoi utilizzare questo script per cercare/sostituire dati serializzati: https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

Questo ha funzionato per me.
- Comprimi tutti i file in un archivio zip
- Scarica il database
- Carica i file sul nuovo server
- Modifica il database con un editor di testo (ho usato Notepad++)
- Sostituisci
domain.com
connewdomain.com
- Carica il database sul nuovo server
- Accedi e goditi il risultato!
Nota: Ricorda di cambiare il nome del dominio all'interno di config.php. Inoltre, copia il file .htaccess sul nuovo server. Questa procedura è valida per un'installazione base di WordPress Multisite con plugin minimi. Cerca sempre di fare un backup prima.
