Wordpress数据库迁移

时间:2009-09-18 22:51:08

标签: database wordpress migration staging

我在Wordpress论坛上看过这个并没有找到任何东西,所以我想我可以尝试一下。

如果您有一个用于测试新插件等的临时/开发Wordpress设置,那么如何将登台数据库中的数据迁移回生产数据库?是否有“Wordpress最佳实践”方法来实现此目的,还是仅限于必须手动将表从一个数据库迁移到另一个数据库?

6 个答案:

答案 0 :(得分:3)

我有一个脚本mysqldump我的生产Wordpress DB的副本,通过我的测试Wordpress安装&恢复它然后纠正所有“生产”设置&测试数据库中的网址。

我的生产和生产测试数据库存在于同一台服务器上,但您可以将mysqldump设置更改为从远程mysql服务器&很容易恢复到本地服务器。

以下是我的脚本:

<强> overwrite_test.coach_db_with_coache_db.sh

#!/bin/bash 
dbUser="co*******"
dbPassword="*****"
dbSource="coach_production"
dbDest="coach_test"
tmpDumpFile="/tmp/$dbSource.sql"

mysqldump --add-drop-table --extended-insert --user=$dbUser --password=$dbPassword --routines --result-file=$tmpDumpFile $dbSource
mysql --user=$dbUser --password=$dbPassword $dbDest < $tmpDumpFile
mysql --user=$dbUser --password=$dbPassword $dbDest < /AdminScripts/change_coach_to_test.coach.sql

<强> change_coach_to_test.coach.sql

-- Change all db references from @oldDomain to @newDomain

SET @oldDomain = 'coach.co.za';
SET @newDomain = 'test.coach.co.za';
SET @testUsersPassword = 'password';

UPDATE `wp_1_options` SET `option_value` = REPLACE(`option_value`,@oldDomain,@newDomain) WHERE `option_name` IN ('siteurl','home','fileupload_url');
UPDATE `wp_1_posts` SET `post_content` = REPLACE(`post_content`,@oldDomain,@newDomain);
UPDATE `wp_1_posts` SET `guid` = REPLACE(`guid`,@oldDomain,@newDomain);
UPDATE `wp_blogs` SET `domain` = @newDomain WHERE `domain` = @oldDomain;
UPDATE `wp_users` SET `user_pass` = MD5( @testUsersPassword );

-- Only valid for main wpmu site
UPDATE `wp_site` SET `domain` = @newDomain WHERE `domain` = @oldDomain;

答案 1 :(得分:1)

也许你只是在寻找错误的东西。备份插件不会轻易处理吗?我知道它们适用于所有大型CMS包......

答案 2 :(得分:1)

这两种方法将使用工具下的导出/导入功能或复制数据库。我使用WordPress数据库备份插件每周给自己发送一份生产数据库副本。

导入功能对于移动wordpress博客可能会有问题,因为您必须经常配置php.ini文件,因为默认情况下您可以在托管的php实现上传的文件的默认值太小。

答案 3 :(得分:1)

答案 4 :(得分:0)

这总结了wordpress核心架构的问题......但是我写了一个插件来解决域名和绝对URL存储在数据库中的问题:

http://wordpress.org/extend/plugins/root-relative-urls/

这将解决@oddbill概述的问题。虽然不要过多担心GUID列中的url,因为该字段从未用于链接生成。

@markratledge提供了一些链接到一些冗长的文档,基本上这样说:

//出口

mysqldump -u[username] -p[password] [database] > backup.sql

//进口

mysql -u[username] -p[password] [database] < backup.sql

如果你从分段推送到制作,你会想要排除评论/ comments_meta表,这样你就不会丢失所有的评论和引用(@ DavidLaing的方法会把它们抹掉。)这假设你只做内容您的暂存环境中的更改。如果你想在生产和临时环境中进行更改,你需要编写同步数据而不是批量覆盖它的脚本...祝你好运,我可以建议添加create&amp;在使用当前架构投入太多时间之前修改时间戳列。

最后,@ RussellStuever的方法适用于大多数情况,只需确定您何时浏览主机映射站点与生产站点。并且确实很有把握,因为有些浏览器会将dns查找缓存几天,直到您实际关闭它们并开始新进程。此时切换主机可能需要一些时间,并且频繁切换可能会令人沮丧。如果您需要使用iPhone进行测试,则需要首先实时发布网站,或者使用可以将出站互联网请求重新映射到本地服务器的良好路由器,因为您无法在大多数移动设备上修改主机文件。

我的插件可让您从http://localhost/http://staging.server.local/http://www.production.com进行开发和测试,而不会出现任何常见的陷阱。然后迁移数据,就像导出和导入数据一样简单,没有搜索和替换必要的步骤或数据库设置调整。

并且不依赖于导入/导出工具,它不能捕获典型的wordpress安装中的所有内容,并且仍然需要不必要的搜索&amp;替换步骤。

答案 5 :(得分:0)

您需要处理序列化对象。这是一个client side HTML5 utility来处理它。因为它都是javascript,所以速度非常快。

另一种方法是将bash脚本挂钩到您的部署中。因此,一旦部署了站点,就会使用新域备份和反序列化数据库。