我们将巨大的互联网服务从域.de重定向到域.com - 这是讨论板(vBulletin)。目前我们需要将所有短语如“domainame.de”更改为“domainame.com”:
有人建议怎么做这样的事情?我们需要将字符串“domainame.de”替换为“domainname.com” - 无处不在。
答案 0 :(得分:2)
你想做的事情听起来很危险,因为它可能会造成一些误报,并无意中改变了一些事情。假设您的旧域名为“acme.de”,新域名为“acme.com”,并且一些随机访问者发布了以下内容(这是一个过于简化的示例):
我喜欢与Acme合作。取决于我的心情。
将其转换为:
非常容易我喜欢和Acme.compending一起工作。
因此,我的建议按优先顺序排列:
根本不更新数据库,只需配置您的Web服务器以将.de流量重定向到.com流量。你不太可能以这种方式犯错误。
如果您必须更新讨论区,请在显示逻辑中进行,而不是在数据库中进行 - 那么您就没有机会犯下不可挽回的错误。
用perl或您喜欢的文本处理语言编写脚本,该语言在每个表/字段上进行正则表达式替换。我建议采取以下策略:
一个。做一个SELECT id,<field name> FROM <table> WHERE <field name> LIKE '%domain.de%'
湾将输出存储为CSV或其他易于解析的格式。
℃。运行正则表达式脚本,将 domain.de 更改为 domain.com
d。检查输出。
即使用脚本的输出执行UPDATE <table> SET <field>=? WHERE id=?
。
首先以小块(一次几十或几百个帖子)进行,并在将更改提交到数据库之前目视检查结果,以确保您没有犯错。
答案 1 :(得分:0)
我不知道这可能对你有用,但看看这个
以下查询将为您提供表格列表(120个表格)
SELECT DISTINCT table_name
FROM
(
SELECT *
FROM information_schema.`COLUMNS` C
) t1
WHERE TABLE_SCHEMA='schema_name'
下一个 您可以对每个表使用UPDATE查询。您可以使用CURSORS
实现此目的我不太喜欢游标,但我认为在这种情况下会有所帮助