0

我们已将巨大的互联网服务从 .de 域重定向到 .com 域 - 这是讨论板 (vBulletin)。目前我们需要将“domainame.de”等所有短语更改为“domainame.com”:

  • 超过 120 个表格(帖子、主题)
  • 很多 MySQL 字段

任何人都有建议如何做这样的事情?我们需要将字符串“domainame.de”替换为“domainname.com”——无处不在。

4

2 回答 2

2

你想做的事情听起来很危险,因为它可能会出现一些误报,并无意中改变事情。假设您的旧域是“acme.de”,新域是“acme.com”,并且一些随机访问者发布了以下内容(这是一个过于简化的示例):

我喜欢与 Acme 一起工作。取决于我的心情。

将其转换为:

我喜欢与 Acme 一起工作。根据我的心情进行补偿。

因此,我的建议按优先顺序排列:

  1. 根本不更新数据库,只需配置您的 Web 服务器以将 .de 流量重定向到 .com 流量。这样你就不太可能犯错。

  2. 如果您必须更新讨论板,请在您的显示逻辑中而不是在数据库中进行更新——那么您将没有机会犯不可挽回的错误。

  3. 用 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=?使用脚本的输出执行,。

    开始时分小块进行(一次几十或几百个帖子),并在将更改提交到数据库之前目视检查结果,以确保您没有犯错误。

于 2013-01-02T12:04:46.860 回答
0

我不知道这是否对你有用,但看看这个

以下查询将为您提供表列表(120 个表)

   SELECT DISTINCT table_name
   FROM
   (
     SELECT *
     FROM information_schema.`COLUMNS` C
   ) t1
   WHERE TABLE_SCHEMA='schema_name'

接下来,您可以对每个表使用 UPDATE 查询。您可以使用CURSORS实现此目的

我不擅长游标,但我认为在这种情况下会有所帮助

于 2013-01-02T12:53:22.720 回答