如何在不使用本地开发的搜索和替换脚本的情况下从生产站点执行MySQL转储?

时间:2012-12-06 作者:Matt

我对WordPress生产数据库执行了MySQL转储,以导入到本地开发环境中。我计划经常执行此数据库转储和导入。我是否可以避免运行搜索&;替换更新所有永久链接、站点URL等的脚本或MySQL查询?

我可以在我的wp配置中包括以下内容吗。php覆盖上述链接:

define(\'WP_HOME\',    \'http://localhost.com:8888/example\');
define(\'WP_SITEURL\', \'http://localhost:8888/example\');
我的目标是尽可能容易地执行从生产站点到本地的例行数据库转储。

2 个回复
SO网友:chrisguitarguy

您发布的内容适用于WordPress生成的所有链接:永久链接、本地文件的脚本/样式队列、特色图片等。

我倾向于动态定义我的网站URL和主页URL,如下所示:

<?php
define(\'WP_HOME\', \'http://\' . $_SERVER[\'HTTP_HOST\']);
define(\'WP_SITEURL\', WP_HOME . \'/wp\');

Note: HTTP_HOST isn\'t always present, use with caution

至于内容、链接和URL,比如指向其他帖子的链接或指向图像的链接,这些内容不会更改,因为它们只是在数据库中,而不是动态生成的。你可以做一些preg_replace 使用the_content 然而,过滤器。

<?php
// probably too simplistic and will break things.
add_filter(\'the_content\', \'wpse75106_change_host\');
function wpse75106_change_host($c)
{
    return preg_replace(
        \'#(https?://)production_site.com#u\',
        \'{$1}local_site.com\',
        $c
    );
}
也就是说,重要的是WP生成的内容,我不会太担心本地机器上的内容链接/图像。

SO网友:Mark Kaplun

单纯的搜索和替换是不够的,因为DB中的部分数据(例如小部件)是序列化的,为了替换序列化数据中的文本,首先必须取消序列化。

您所能做的最好的事情是在开发服务器上完全复制生产环境,其中至少应包括将主机文件更改为将生产域指向测试服务器IP地址。设置好后,保持源文件和DB的同步将为您提供一个良好的开发环境。

结束