2009-05-07 4 views
16

Ho una stringa contenuta all'interno di una installazione wordpress (il nome di un server) migliaia di volte, su più colonne, record e tabelle.Come cercare e sostituire tutte le istanze di una stringa all'interno di un database?

Vorrei aggiornarlo con la posizione di un altro server: stiamo spostando il contenuto.

Quindi la fonte sarebbe qualcosa come http://my-server1/some/link/to/something e vorrei sostituirlo con http://my-other-server/some/link/to/something. Sto essenzialmente cercando di ripetere questo processo per ogni istanza di http://my-server1.

C'è un modo semplice per farlo in MySQL? Uno strumento? O devo purtroppo aggiornare ogni record in modo problematico?

Grazie,

+0

avere questo tipo di dati (i dati dovrebbero essere almeno absoute percorsi) in un database è una pessima idea dato che è necessario modificarlo quando ci si sposta. Perché hai l'URL del sito in un'installazione di Wordpress? Ci dovrebbe essere solo uno, pref prefisso globale. –

risposta

34

A grezzo (ma efficace) modo di farlo sarebbe quello di scaricare lo schema in un file, si applicano con attenzione la ricerca e sostituzione e poi reimportare.

È un dato di fatto che ho fatto oggi :)

+0

Felice è d'aiuto. Assicurati di applicare la sostituzione con attenzione e cambia solo ciò che desideri veramente. – cherouvim

+0

Che dire della situazione in cui devo sostituire almeno il 2000 anziché uno? Potresti per favore aiutare? – SachinKRaj

+0

@SachinKRaj: Scriverò molto attentamente uno script di shell con 2000 istruzioni 'sed'. – cherouvim

1

C'è anche un plugin per Wordpress chiamato Search Regex, che consente di eseguire grep ricerca e sostituzione in tutto il database.

14

Si è imbattuto in questo in una ricerca su google, ma questo potrebbe aiutare alcune persone. Se conosci le tabelle e le colonne (si potrebbe trovare questo utilizzando la ricerca con caratteri jolly in phpMyAdmin),

UPDATE nome_tabella SET column_name = REPLACE (column_name, 'http: // oldsite. com ',' http://newsite.com ');

Sostituire grassetto parti con il vostro.

Se si dispone di un database di grandi dimensioni, è possibile applicarlo in uno script che può eseguire il ciclo di ogni tabella e colonna.

+0

anche 'REPLACE()' funzionerà su dati di array serializzati? –

9

Il metodo di scarico MySQL sarebbe la soluzione migliore se si è felici di reimportare l'intero database. Per chiunque non voglia fare ciò, l'installazione di base di WordPress in realtà consiste solo di 11 tabelle, di cui poche sono colonne di contenuto, quindi fare una sostituzione per colonna sarebbe altrettanto facile. Dando per scontato che non hanno un sacco di tavoli di plugin referenziare la tua link o stringa di questo sarà il tuo SQL:

UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx'); 
UPDATE wp_comments SET comment_content = REPLACE(comment_content,'xcurrentx','xreplacementx'); 
UPDATE wp_links SET link_description = REPLACE(link_description,'xcurrentx','xreplacementx'); 
UPDATE wp_options SET option_value = REPLACE(option_value,'xcurrentx','xreplacementx'); 
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx'); 
UPDATE wp_posts SET post_content = REPLACE(post_content,'xcurrentx','xreplacementx'); 
UPDATE wp_posts SET post_title = REPLACE(post_title,'xcurrentx','xreplacementx'); 
UPDATE wp_posts SET post_excerpt = REPLACE(post_excerpt,'xcurrentx','xreplacementx'); 
UPDATE wp_term_taxonomy SET description = REPLACE(description,'xcurrentx','xreplacementx'); 
UPDATE wp_usermeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx'); 
+0

Questa è in realtà una risposta migliore. Non so perché altre risposte siano selezionate come corrette e avendo così tanti voti – Parag

2

La tua domanda è stata pubblicata su 2009 e nel corso dello stesso anno un altro ragazzo ha sviluppato uno strumento fondamentale php per la ricerca di un stringa su tutte le tabelle di un determinato database. Opzionalmente è anche possibile sostituire tutte le occorrenze con una stringa diversa.

Ancora dopo 5 anni (al momento della scrittura) l'uso di questo strumento rispetto a un'installazione di Wordpress è efficace e molto più semplice a mio avviso rispetto all'utilizzo di un mysql dump (anche se si potrebbe voler creare un dump anche prima di eseguire il script per scopi di backup).

Potete trovare maggiori informazioni nel blog del suo autore Eric Amundson e nella pagina di Launchpad del progetto MySQL Search & Replace

Non credo siete ancora alla ricerca di una risposta dopo tutto questo tempo, ma ho deciso di pubblica anche il mio suggerimento, sperando che possa aiutare qualcun altro a saltare qui in futuro, ancora alla ricerca di una soluzione a questo problema.

0

Addittionally alla risposta di Brad Larson - per impostare le variabili come:

SET @what_to_be_replaced = "what_to_be_replaced", @to_be_replaced_by = "to_be_replaced_by"; 

e quindi utilizzarlo come segue:

UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value, @what_to_be_replaced, @to_be_replaced_by);