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