如何替换Wordpress数据库中的域名?


12

我有一个安装在开发环境中的Wordpress数据库...因此,对该站点本身的所有引用都具有固定的IP地址(例如192.168.16.2)。现在,我必须将该数据库迁移到主机上的新Wordpress安装中。问题是SQL转储包含很多对IP地址的引用,我必须将其替换为:my_domain.com。

我可以使用sed或其他命令从命令行更改它,问题是有很多使用JSON的配置数据。所以呢?好了,正如您所知道的,JSON数组使用类似的东西:s:4:知道元素有多少个字符,因此,如果我仅将IP替换为域名,则配置文件将被破坏。

几年前,我在Windows上使用了一个应用程序,该应用程序可以更改数据库中的值并处理JSON数组。不幸的是,我忘记了该应用程序的名称...所以问题是:您知道有什么应用程序可以让我做自己想做的事情吗?


1
这不是一个完整的答案,但可能会帮助您寻找一个答案:您正在查看的数据不是JSON格式的。JSON(通常)不存储这样的值类型和长度。您正在查看的是SERIALIZED数据。:谷歌搜索“的MySQL顶替连载”得到这个页面,这可能有助于davidcoveney.com/...
MathSmath

嗨,您的评论是对我有用的唯一答案...将其移至答案以将其标记为正确。谢谢!
克里斯蒂安(Cristian)2010年

很高兴它有所帮助!我已将其发布为答案。
MathSmath 2010年

Answers:


7

您正在查看的数据不是JSON格式的。JSON(通常)不存储这样的值类型和长度。您正在查看的是SERIALIZED数据。谷歌搜索“ mysql replace serialized”将产生此页面,这可能会有所帮助:http : //davidcoveney.com/mysql-database-search-replace-with-serialized-php/


谢谢...我作为PHP开发人员已经工作了2年。我不敢相信我忘记了序列化和JSON字符串之间的区别。
克里斯蒂安

8

食品法典委员会有不错的指南- 更改站点URL

基本上,URL在很多地方都无关紧要(我可能会错过一些地方):

  • homesiteurl控制WP认为网站所在位置的选项;
  • 在GUID之后,它们看起来像链接,但实际上不是,只是标识符。我不是绝对确定它们是无关紧要的,但是我在测试堆栈上更改了很多URL,并且从不费心去更新它们。
  • 邮件正文中的链接;
  • 可能是插件设置中的链接。

有很多步骤。在您mv olddir.com newdir.com需要重新配置Web服务器之后,重新启动Web服务器。按照此处的法典说明进行操作,然后您应该能够以管理员身份登录。那应该让您开始:-)
PJ Brunet

6

正如Rarst所说,数据库中只有两个设置需要更改。导入数据库后,我登录PHPMyAdmin并直接编辑数据库。

我一直在PC上使用开发服务器来导入数据文件,并且这些数据文件的URL沿http:// localhost / testsite / post-name /附加在Posts上,这从来没有引起问题。

我曾经使用SQL搜索和替换,直到意识到没关系。我已经将几个站点从一个域迁移到另一个域,并且在内容中具有绝对URL的地方,我将使用SQL搜索和替换选项。

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

大卫


有一些插件,例如ContactForm7,它也将域名以及其他配置变量保存在序列化的字符串中。当您修改序列化的字符串时,如果其长度更改,它可能会损坏,因此,实际上,有时候更改的内容不仅仅是两个设置。
克里斯蒂安


3

您可以在中使用常量设置这些值wp-config.php。之后,您可以根据需要通过插件Adminer更改数据库中的条目。将其写在中,wp-config.php并且数据库中的值不相关:

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


2

简单的SQL查询-不需要复杂的REPLACE内容:

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

将它们与PHPMyAdmin或其他您希望访问数据库的方式一起使用。


2

确保选择了新数据库,然后在表上运行一些sql更新和替换命令,特别是wp_options,wp_posts和wp_postmeta。

使用下面的代码,并交换旧的和新的URL,不要使用斜杠。另外,如有必要,请在适用时更改表前缀值(即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');

1

这是一个非常老的问题,但是由于我在寻找其他东西时遇到了这个问题,因此我想将其添加以供将来参考。

我认为最简单,最完整的方法是使用searchreplacedb2.php。可以在以下位置找到它:http : //interconnectit.com/products/search-and-replace-for-wordpress-databases/及其使用说明。

从我的wordpress网站上的开发人员迁移到实际环境确实节省了很多时间。

完成后,只需确保将其从公共服务器中删除即可!


0

我看到您想将WordPress网站从开发环境迁移到新服务器或生产服务器。

最近,我将站点移至生产服务器,并且遇到了同样的情况。我需要更新站点URL,因为WordPress将站点URL存储在数据库中。

我发现使用了很好的MySQL查询,可以轻松地直接从Database更改URL。

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

您只需要将站点URL从旧域名替换为新域名,然后使用PHPMYADMIN在MySQL上执行查询即可。

有关更多参考,请阅读教程。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.