mysql:在所有表格中将http://old-domain.com更改为http://new-domain.com

时间:2010-01-23 05:38:24

标签: sql mysql wordpress

我正在使用此处的陈述:

http://www.mydigitallife.info/2007/10/01/how-to-move-wordpress-blog-to-new-domain-or-location/

但我必须修改它们,因为我使用的是多用户,它有不同的表结构(奇怪的编号表)。正如你在previous question中看到的那样,这一切都非常有问题......所以我的问题是:

我可以在该数据库的每个表格中将 http://old-domain.com 更改为 http://new-domain.com 吗?我如何进行这样的搜索并用mysql替换?或者可能还有其他东西可以更好地用于此任务?

3 个答案:

答案 0 :(得分:8)

您可以将整个数据库转储到.sql文件并执行替换并将其重新导入。

要将db转储到sql文件,你可以使用mysqldump命令,或者你可以做phpmyadmin

mysqldump --opt -uUSERNAME -pPASSWORD -h MYSQLDOMAIN YOURDB > yourdbdump.sql

要替换.sql文件中的文本,您可以这样做

sed -ie 's/old-domain.com/new-domain.com/g' yourdbdump.sql

要恢复它

mysql -uUSERNAME -pPASSWORD -h MYSQLDOMAIN YOURDB < yourdbdump.sql

答案 1 :(得分:3)

WordPress MU是一个痛苦的迁移屁股。

没有任何内容可以用于表格并替换这些网址。你要小心编辑在案件的网址存储任何序列化对象或数组里面,因为这样会破坏数据完整性的SQL转储文件。

如果你想直接在MySQL内部进行,你可以这样做,但这很费时间。它也是最安全的。

这将是最容易在phpMyAdmin,即使是经验SQL大师的phpMyAdmin是只是简单方便,因为你要经常编辑SQL查询。基本查询是:

Update "table_name"
SET "column_name" = REPLACE("column_name","find","replace")
WHERE "column_name" LIKE "%find%"

因此,在您的情况下,对于帖子表:

Update wp_1_posts
SET post_content = REPLACE(post_content,"www.oldurl.com","www.newurl.com")
WHERE post_content LIKE "%www.oldurl.com%"

接下来,查看postmeta表。如果有序列化数据,你可能会遇到麻烦。所以,做一个搜索第一,看看有什么数据的模样,看看是否有你应该离开了发现的任何具体领域/替换脚本。您对此表的更新看起来很像最后一个:

Update wp_1_postmeta
SET meta_value = REPLACE(meta_value,"www.oldurl.com","www.newurl.com")
WHERE meta_value LIKE "%www.oldurl.com%"

如果找到了需要排除的字段,请修改脚本,如下所示:

Update wp_1_postmeta
SET meta_value = REPLACE(meta_value,"www.oldurl.com","www.newurl.com")
WHERE meta_value LIKE "%www.oldurl.com%"
AND meta_name NOT IN ('meta_name_1', 'meta_name_2')

选项表应该是手工完成的 - 你有太多的潜力通过自动化来搞砸了。查找siteurlhomefileupload_url字段。查找可能存储值的任何其他内容并手动更新。

然后适当更新wp_blogs和wp_site。

迁移MU是噩梦的组成部分。慢下来,看看所有内容,最重要的是在主要数据的副本上做所有这些以便先测试。数据库空间很便宜,丢失的数据不是。

答案 2 :(得分:0)

您需要INSERT()功能。