Come sostituire il nome del dominio in un database WordPress?
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?

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
esiteurl
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.

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 :-)

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/

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.

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

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

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

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.

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

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.

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

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.

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!

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/

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