将WordPress多站点实例复制到第二个位置后,数据库连接错误


11

这是我的设置。我有一个运行在http://example.com的Multisite实例,我想进行开发和暂存。将WP的现有Multisite实例移至localhost是一个噩梦,因此我将在暂存位置上进行开发。

我将http://staging.example.com设置为指向托管帐户的/ public_html / staging /目录,并将所有WP文件从我的根目录复制到/ staging /目录中。我还复制了数据库文件(SQL转储,将表导入到新数据库中),并更改了wp-config.php文件以指向新数据库。

运行SQL更改数据库记录后,我还更改了wp-config.php文件中的这一行:

/** Turning on WordPress MU, new in 3.0 */
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'example.com' ); // <- I change this line
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

变成:

define( 'DOMAIN_CURRENT_SITE', 'staging.example.com' ); // <- now changed

当我加载http://staging.example.com时,我得到... Error establishing database connection

我已经检查了用户名和密码并对其进行了三遍检查,确保用户对新的登台数据库具有所有特权,并且将DBHOST保留为“ localhost”(尽管未将其更改为staging.example.com)帮助)。

为什么数据库连接失败?任何人?(谢谢您的帮助。)

注意: http : //example.com在非常相似的数据库连接设置上运行良好,只是使用了不同的数据库,因此数据库服务器关闭不是问题。


嗯 没人吗 当然,这是一个奇怪的错误。
詹森·罗德斯

我试图做就地WordPress的网络迁移时同样的错误-没有主机移动
米克Ohtamaa

好。我找到了各种故障模式,使他们的博客文章:opensourcehacker.com/2011/08/22/...
米克Ohtamaa

Answers:


2

一个想法-当我转到www.example.com/staging/wp-admin时,它会自动将我重定向到www.example.com/wp-admin

从staging.example.com到example.com/staging的重定向是否可能与现有安装冲突?

更新:看起来它可能与.htaccess问题以及数据库中复杂的域引用有关

从WP Codex:

移动WordPress多站点

多站点移动起来要复杂得多,因为数据库本身具有对服务器名称以及文件夹位置的多个引用。

移动多站点的最佳方法是移动文件,编辑.htaccess和wp-config.php(如果包含多站点的文件夹名称已更改),然后手动编辑数据库。搜索您的域名的所有实例,然后根据需要进行更改。此步骤尚不容易自动化。如果要将多站点从一个文件夹移动到另一个文件夹,则需要确保编辑wp_blogs条目以正确更改文件夹名称。


11

我解决了它并起作用了 :)

wp_blogs表中,

旧结构

Domain : localhost/smart_facility_linux
Path : /

但是我将其更改为使其工作如下:

对于根站点:

Domain : localhost
Path : /smart_facility_linux/

对于子站点1(主站点下的任何子站点,我都给出了示例):

Domain : localhost
Path : /smart_facility_linux/subsite1/

不幸的是对我没用。这是在数据库中为WP使用绝对路径的愚蠢行为的完美示例。
Pegues

@Pegues它确实在这里为10个以上的人工作了:)
Pratik

1
我很高兴它对其他人有用。这对于很多人来说是行不通的-从我的研究来看,这是因为从子域切换到子目录时,db值存在差异。而且,我最初的评论是,WP不明智地使用绝对路径。从来没有,而且是造成许多问题的原因。在企业级别上,实际上不可能通过CI / CD管道设置适当的工作流程。
Pegues

2

我发现,实际上只有一种方法可以轻松地转移域或主机。它对我来说在单站点和多站点安装中都可以正常工作。

  1. 将数据库导出到.sql文件。(我为此使用PHPMyAdmin)
  2. 创建要编辑的文件的新副本,名称略有不同。
  3. 在您喜欢的文本编辑器>(例如gedit)中打开文件
  4. 从生产到开发的域和绝对路径(/ home / username / public_html /到/ home / username / public_html /)上运行查找/替换。
  5. 保存文件。
  6. 将整个安装复制到您的开发目录中。
  7. 将以下行添加到wp-config.php文件中:

    define('RELOCATE',true);

  8. 登录并保存您的永久链接设置。

  9. 删除您放入wp-config.php中的定义规则。


1
除非您最终将序列化数据中的字符串(例如小部件或主题选项)替换为具有不同长度的字符串,否则此方法效果很好。序列化的数据如下所示:s:76:“ hxxp://www-dev.example.com/wp-content/uploads/company_logo_swoosh.gif's:70:” hxxp://www.example.com/ wp-content / uploads / company_logo_swoosh.gif'(注意:长度76和70不再与显示的字符串相对应-我编辑了我的网站详细信息,并且没有跟踪新的字符数。)唯一的解决方案是手动更新计数-或使分段域的长度保持不变。
marfarma 2011年

我还用xx替换了tt,所以不会混淆网址-您看不到它们之间的区别。
marfarma 2011年

很高兴知道。这意味着我们至少应该花一些时间浏览所有找到并替换的条目,而不是全部替换。
杰夫·塞布林

1
你可以使用这个脚本来查找/替换序列数据:interconnectit.com/products/...
科斯塔
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.