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

Posted

技术标签:

【中文标题】mysql:在所有表中将 http://old-domain.com 更改为 http://new-domain.com【英文标题】:mysql: change http://old-domain.com to http://new-domain.com in all tables 【发布时间】:2011-01-08 12:00:00 【问题描述】:

我正在使用这里的语句:

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 替换?或者也许其他东西会更好地用于这项任务?

【问题讨论】:

【参考方案1】:

您可以将整个 db 转储到 .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

【讨论】:

在什么?我在带有 gnome 的 linux 上。 嘿,这对我有用,但我想了解 -ie 的含义,有人可以解释一下吗?谢谢! @ohmmho, -i 表示编辑文件到位,我不知道为什么我把-e 放在那里,可能不是真的需要。【参考方案2】:

WordPress MU 迁移起来很麻烦。

没有什么可以逐个表替换这些 URL。并且您要小心编辑 sql 转储文件,以防 url 存储在任何序列化对象或数组中,因为您将破坏该数据的完整性。

如果您想直接在 MySQL 中执行此操作,则可以,但会很耗时。这也是最安全的。

这在 PHPMyAdmin 中是最简单的,即使对于经验丰富的 SQL 专家来说也是如此,因为 PHPMyAdmin 非常方便,因为您将经常编辑 SQL 查询。基本查询是:

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

因此,就您而言,对于 post 表:

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 是噩梦的组成部分。慢慢来,查看所有内容,最重要的是首先在您的主要数据的副本上执行所有这些操作以进行测试。数据库空间很便宜,丢失的数据则不然。

【讨论】:

另外:请注意 wp_blogs 中的 blog_id 与数据库中的 wp_*_table 结构相匹配 - 您可以编写一个 PHP 脚本来完成并为您处理迁移。我已经这样做了,它可以节省大量时间(我经常使用 WP 和 WPMU)。不幸的是,我无法发布脚本,因为它是在公司时间编写的。【参考方案3】:

你想要INSERT() 函数。

【讨论】:

以上是关于mysql:在所有表中将 http://old-domain.com 更改为 http://new-domain.com的主要内容,如果未能解决你的问题,请参考以下文章

无法在 MySQL 查询中将字符串转换为日期时间

如何在 Java 中将日期插入 MySQL 数据库表?

sql 如何在MySql中将数据插入表中

如何在Mysql大表中将数据从表移动到另一个表

试图在php MYSQL中将数据从一个表插入另一个表[关闭]

在 Perl 中将 MySQL 结果作为哈希表返回