Come sostituire il nome del dominio in un database WordPress?

21 dic 2010, 22:54:53
Visualizzazioni: 46.7K
Voti: 17

Ho un database WordPress che è stato installato in un ambiente di sviluppo... quindi, tutti i riferimenti al sito stesso hanno un indirizzo IP fisso (ad esempio 192.168.16.2). Ora, devo migrare quel database in una nuova installazione WordPress su un hosting. Il problema è che il dump SQL contiene molti riferimenti all'indirizzo IP, e devo sostituirlo con: my_domain.com.

Potrei usare sed o qualche altro comando per cambiarlo dalla riga di comando, ma la preoccupazione è che ci sono molti dati di configurazione che usano JSON. Quindi? Beh, come sapete, gli array JSON usano cose come: s:4: per sapere quanti caratteri ha un elemento, e quindi, se sostituisco semplicemente l'IP con il nome del dominio, i file di configurazione si corromperanno.

Alcuni anni fa ho usato un'applicazione per Windows che permette di cambiare i valori in un database e si occupa degli array JSON. Purtroppo, ho dimenticato il nome dell'applicazione... quindi la domanda è: conoscete qualche applicazione che mi permetta di fare quello che voglio?

3
Commenti

Questa non è una risposta completa, ma potrebbe aiutarti nella ricerca: i dati che stai osservando non sono formattati in JSON. JSON normalmente non memorizza tipi di valore e lunghezze in quel modo. Quello che stai vedendo sono dati SERIALIZZATI. Una ricerca su Google per "mysql replace serialized" restituisce questa pagina, che potrebbe esserti utile: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/

MathSmath MathSmath
21 dic 2010 23:10:09

Ehi, il tuo commento è l'unica risposta che mi è stata utile... spostalo come risposta per poterlo segnare come corretto. Grazie!

Cristian Cristian
22 dic 2010 14:39:25

Felice che ti sia stato utile! L'ho pubblicato come risposta.

MathSmath MathSmath
22 dic 2010 20:16:38
Tutte le risposte alla domanda 11
1
11

Il Codex ha una guida decente - Cambiare l'URL del sito.

Fondamentalmente ci sono diversi punti in cui l'URL ha importanza o meno (potrei dimenticarne alcuni):

  • le opzioni home e siteurl che controllano dove WP pensa che sia il sito;
  • i GUID dei post, che sembrano link ma in realtà non lo sono - sono solo identificatori. Non sono assolutamente sicuro che siano irrilevanti, ma ho cambiato spesso gli URL su un ambiente di test e non mi sono mai preoccupato di aggiornarli.
  • i link nei corpi dei post;
  • possibilmente i link nelle impostazioni dei plugin.
22 dic 2010 06:58:03
Commenti

Ci sono diversi passaggi. Dopo aver mv olddir.com newdir.com dovrai riconfigurare il tuo webserver, riavviare il webserver. Segui le istruzioni del codex qui e poi dovresti essere in grado di accedere come amministratore. Questo dovrebbe aiutarti a iniziare :-)

Jay Brunet Jay Brunet
17 feb 2015 23:00:38
2

I dati che stai visualizzando non sono formattati in JSON. Il JSON normalmente non memorizza tipi di valore e lunghezze in quel modo. Quello che stai guardando sono dati SERIALIZZATI. Una ricerca su Google per "mysql replace serialized" restituisce questa pagina, che potrebbe aiutarti: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/

22 dic 2010 20:16:06
Commenti

Grazie... Ho lavorato come sviluppatore PHP per 2 anni. Non riesco a credere di aver dimenticato la differenza tra qualcosa serializzato e una stringa JSON.

Cristian Cristian
22 dic 2010 20:56:05

questo ora ha un repository github: https://github.com/interconnectit/Search-Replace-DB

Lluís Lluís
22 lug 2021 09:15:50
0

Puoi impostare questi valori con le costanti nel file wp-config.php. Successivamente, se lo desideri, puoi modificare le voci nello strumento di database come 'PhpMyAdmin' o 'Adminer'.

Scrivi questo nel wp-config.php e i valori nel database non saranno rilevanti:

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');
22 dic 2010 00:02:59
1

Come ha detto Rarst sopra, ci sono solo due impostazioni nel database che DEVONO essere modificate. Dopo aver importato il database, accedo a PHPMyAdmin e modifico direttamente il database.

Utilizzo un server di sviluppo sul mio PC tutto il tempo per importare feed di dati e hanno l'URL allegato ai Post qualcosa come http://localhost/testsite/nome-post/ e non ha mai causato un problema.

Prima utilizzavo una ricerca e sostituzione SQL fino a quando non ho capito che non importava. Ho migrato alcuni siti da un dominio a un altro e dove avevo URL assoluti nel contenuto utilizzo l'opzione di ricerca e sostituzione SQL.

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

David

23 dic 2010 01:53:19
Commenti

Ci sono alcuni plugin, come ContactForm7, che salvano anche il nome del dominio all'interno di una stringa serializzata, insieme ad altre variabili di configurazione. Quando modifichi una stringa serializzata, questa può corrompersi se la sua lunghezza cambia, quindi in realtà a volte ci sono più cose da modificare rispetto a semplicemente due impostazioni.

Cristian Cristian
23 dic 2010 03:03:17
0

Questa è un'ottima risorsa che ho segnato tra i preferiti e a cui torno più e più volte http://www.onextrapixel.com/2010/01/30/13-useful-wordpress-sql-queries-you-wish-you-knew-earlier/

Dicono

UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldsiteurl.com', 'http://www.newsiteurl.com') WHERE option_name = 'home' OR option_name = 'siteurl';
21 dic 2010 23:51:47
0

Semplici query SQL - nessuna complicata funzione REPLACE richiesta:

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';

Usale con PHPMyAdmin o qualsiasi altro metodo preferisci per accedere al database.

23 dic 2010 04:31:57
0

Assicurati di aver selezionato il nuovo database, quindi esegui alcuni aggiornamenti SQL e comandi di sostituzione sulle tabelle, in particolare wp_options, wp_posts, wp_postmeta.

Utilizza il codice come mostrato di seguito e sostituisci i tuoi vecchi e nuovi URL, senza slash finali. Se necessario, modifica anche i prefissi delle tabelle dove applicabile (ad esempio 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');
14 ott 2017 20:31:12
0

Dai un'occhiata alla mia risposta a questa domanda:

Affronta i tuoi problemi con la pulizia dei dati e può essere personalizzato per esigenze specifiche di migrazione dei dati utilizzando anche gli hook.

Spero ti sia utile.

22 dic 2010 07:16:36
0

Questa è una domanda molto vecchia, ma dal momento che mi ci sono imbattuto mentre cercavo qualcos'altro, ho pensato di aggiungere questa informazione per riferimento futuro.

Penso che il modo più semplice e completo per fare questo sia utilizzare searchreplacedb2.php. Può essere trovato qui: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ insieme a una spiegazione del suo utilizzo.

Mi ha sicuramente fatto risparmiare molto tempo durante la migrazione da ambienti di sviluppo a quelli live nei miei siti WordPress.

Assicurati solo di eliminarlo da un server pubblico dopo aver finito!

19 apr 2013 20:02:14
0

Vedo che vuoi spostare il tuo sito WordPress dall'ambiente di sviluppo a un nuovo server o server di produzione.

Recentemente ho spostato il mio sito sul server di produzione e mi sono trovato nella stessa situazione. Ho bisogno di aggiornare l'URL del sito perché WordPress memorizza l'URL del sito nel database.

Ho trovato una buona query MySQL che mi permette di cambiare facilmente l'URL direttamente dal database come segue:

SET @search := "http://vecchiodominio.com";
SET @replace := "http://nuovodominio.com";

UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "siteurl";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "home";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "product_list_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "shopping_cart_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "checkout_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "widget_text";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "headerImageLogo";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "cunjo_plugin_url";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "wpsr_socialbt_data";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "issuem";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "_transient_dgxdonate_t70pbg1htu_1396322372";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "dgx_donate_log";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "headerBackgroundImage";
UPDATE `wp_options` SET `option_value` = REPLACE(option_value, @search, @replace) WHERE option_name = "transact_url";
UPDATE `wp_postmeta` SET `meta_value`=REPLACE(meta_value, @search, @replace);
UPDATE `wp_usermeta` SET `meta_value`=REPLACE(meta_value, @search, @replace);
UPDATE `wp_posts` SET `guid`=REPLACE(guid, @search, @replace);
UPDATE `wp_posts` SET `post_content`=REPLACE(post_content, @search, @replace);

Devi solo sostituire l'URL del tuo sito dal vecchio dominio al nuovo dominio, quindi eseguire la query su MySQL utilizzando PHPMYADMIN.

Per ulteriori riferimenti, puoi leggere questo tutorial.

https://tryvary.com/wordpress-change-url-in-database-using-mysql-query/

27 mar 2020 05:35:07
0

Assicurati di essere connesso al nuovo database, poi esegui alcune query SQL.

Utilizza il codice come mostrato di seguito e sostituisci i tuoi vecchi e nuovi URL, senza barre finali. Se necessario, modifica anche i prefissi delle tabelle dove applicabile (ad esempio wp_).

UPDATE wp_posts 
SET post_content = REPLACE(post_content, 'https://oldomain.com', 'https://newdomain.com'),
    guid = REPLACE(guid, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_postmeta 
SET meta_value = REPLACE(meta_value, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_options 
SET option_value = REPLACE(option_value, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_commentmeta 
SET meta_value = REPLACE(meta_value, 'https://oldomain.com', 'https://newdomain.com');

UPDATE wp_comments 
SET comment_content = REPLACE(comment_content, 'https://oldomain.com', 'https://newdomain.com');
13 gen 2025 18:34:10