Como substituir o nome de domínio em um banco de dados Wordpress?

12

Eu tenho um banco de dados Wordpress que foi instalado em um ambiente de desenvolvimento ... portanto, todas as referências ao site em si têm um endereço IP fixo (por exemplo, 192.168.16.2). Agora, tenho que migrar esse banco de dados para uma nova instalação do Wordpress em uma hospedagem. O problema é que o dump SQL contém muitas referências ao endereço IP e eu tenho que substituí-lo por: meu_domínio.com.

Eu poderia usar sedou algum outro comando para alterar isso na linha de comando, o problema é que existem muitos dados de configuração que usam JSON. E daí? Bem, como você sabe, as matrizes JSON usam coisas como: s:4:para saber quantos caracteres um elemento possui e, assim, se eu apenas substituir o IP pelo nome de domínio, os arquivos de configuração serão corrompidos.

Eu usei um aplicativo para Windows há alguns anos atrás que permite alterar valores em um banco de dados e cuida das matrizes JSON. Infelizmente, esqueci o nome do aplicativo ... então a pergunta é: você conhece algum aplicativo que me permita fazer o que quero?

Cristian
fonte
1
Esta não é uma resposta completa, mas pode ajudá-lo a procurar uma: os dados que você está vendo não estão no formato JSON. JSON (normalmente) não armazena tipos e comprimentos de valor assim. O que você está vendo são dados SERIALIZADOS. Uma pesquisa no google por "mysql replace serialized" gera esta página, o que pode ajudar: davidcoveney.com/…
MathSmath
Ei, seu comentário é a única resposta que foi útil para mim ... mova-o para uma resposta para marcá-lo como correto. Obrigado!
Cristian
Fico feliz que ajudou! Eu o publiquei como resposta.
MathSmath

Respostas:

7

Os dados que você está vendo não estão no formato JSON. JSON (normalmente) não armazena tipos e comprimentos de valor assim. O que você está vendo são dados SERIALIZADOS. Uma pesquisa no google por "mysql replace serialized" gera esta página, o que pode ajudar: http://davidcoveney.com/mysql-database-search-replace-with-serialized-php/

MathSmath
fonte
Obrigado ... Trabalhei como desenvolvedor PHP por 2 anos. Não acredito que esqueci a diferença entre algo serializado e uma string JSON.
Cristian
8

O Codex possui um guia decente - Alteração da URL do site .

Basicamente, existem vários lugares onde o URL importa ou não tanto (talvez esteja faltando alguns):

  • homee siteurlopções que controlam onde o WP pensa que o site está;
  • postar GUIDs, eles parecem links, mas na verdade não são - apenas identificadores. Não tenho certeza absoluta de que sejam irrelevantes, mas tive muitas alterações de URLs na pilha de teste e nunca me preocupei em atualizá-las.
  • links em órgãos de postagem;
  • possivelmente links nas configurações do plugin.
Rarst
fonte
Existem alguns passos. Depois de mv olddir.com newdir.comprecisar reconfigurar seu servidor da Web, reinicie o servidor. Siga as instruções do codex aqui e, em seguida, você poderá fazer login como administrador. Isso deve ajudá-lo a começar :-)
PJ Brunet
6

Como Rarst disse acima, existem apenas duas configurações no banco de dados que precisam ser alteradas. Depois de importar o banco de dados, eu entro no PHPMyAdmin e edito o banco de dados diretamente.

Eu uso um servidor de desenvolvimento no meu PC o tempo todo para importar feeds de dados e eles têm o URL anexado aos Posts ao longo das linhas http: // localhost / testsite / post-name / e isso nunca causou um problema.

Eu costumava usar uma pesquisa SQL e substituir até perceber que não importava. Migrei alguns sites de um domínio para outro e, onde tive URLs absolutos no conteúdo, usarei a opção de pesquisa e substituição do SQL.

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

David

David Law
fonte
Existem alguns plugins, como o ContactForm7, que também salva o nome do domínio dentro de uma sequência serializada, entre outras variáveis ​​de configuração. Quando você modifica uma cadeia de caracteres serializada, ela pode ser corrompida se o comprimento for alterado; portanto, às vezes, há mais coisas a serem alteradas do que apenas duas configurações.
Cristian
3

Você pode definir esses valores com constantes no wp-config.php. Depois disso, você pode, quando quiser, alterar as entradas no banco de dados via plugin Adminer. Escreva isso no wp-config.phpe os valores no banco de dados não são relevantes:

define('WP_HOME', 'http://example.com/to-wordpress');
define('WP_SITEURL', 'http://example.com/to-blog');
bueltge
fonte
2

Consultas SQL simples - não é necessário nenhum material REPLACE complicado:

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

Use aqueles com PHPMyAdmin ou qualquer outra maneira que você preferir acessar o banco de dados.

Marca
fonte
2

Verifique se o novo banco de dados está selecionado e, em seguida, execute algumas atualizações sql e comandos de substituição nas tabelas, nomeadamente: wp_options, wp_posts, wp_postmeta.

Use o código abaixo e troque seus URLs antigos e novos, sem barras. Se necessário, altere os valores do prefixo da tabela, quando aplicável (por exemplo, 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');
user129645
fonte
1

Essa é uma pergunta muito antiga, mas desde que me deparei com ela enquanto procurava por outra coisa, pensei em adicionar isso para referência futura.

Eu acho que a maneira mais simples e completa de fazer isso é usando o searchreplacedb2.php. Pode ser encontrado aqui: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ junto com uma explicação de seu uso.

Definitivamente, me poupou muito tempo com a migração de ambientes dev para live em meus sites wordpress.

Apenas certifique-se de excluí-lo de um servidor público depois de terminar!

MatthewLee
fonte
0

Vejo que você deseja mover seu site WordPress do ambiente de desenvolvimento para um novo servidor ou servidor de produção.

Recentemente, mudei meu site para o servidor de produção e enfrento a mesma situação. Preciso atualizar o URL do site porque o WordPress armazenou o URL do site no banco de dados.

Eu encontrei uma boa consulta MySQL usando que eu posso facilmente mudar a URL diretamente do banco de dados.

SET @search := "http://olddomain.com";
SET @replace := "http://newdomain.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);

Você só precisa substituir o URL do site do nome de domínio antigo para o novo domínio e executar a consulta no MySQL usando PHPMYADMIN.

Para mais referência, você pode ler este tutorial.

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

Renish Khunt
fonte