替换120多个表中的MySQL值

替换120多个表中的MySQL值,mysql,regex,replace,vbulletin,Mysql,Regex,Replace,Vbulletin,我们已经将巨大的互联网服务从domain.de重定向到domain.com-这是讨论板(vBulletin)。目前,我们需要将所有短语(如“domainame.de”)更改为“domainame.com”: 超过120个表(立柱、螺纹) 很多MySQL字段 有人建议怎么做这样的事吗?我们需要将字符串“domainame.de”替换为“domainname.com”-随处可见。您想做的事情听起来很危险,因为它可能会遇到一些误报,并在无意中更改内容。假设您的旧域是“acme.de”,新域是“ac

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

  • 超过120个表(立柱、螺纹)
  • 很多MySQL字段

有人建议怎么做这样的事吗?我们需要将字符串“domainame.de”替换为“domainname.com”-随处可见。

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

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

很容易将其转换为:

我喜欢和Acme一起工作。对我的情绪进行补偿

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

  • 根本不更新数据库,只需将web服务器配置为将.de流量重定向到.com流量即可。这样你就不太可能犯错误

  • 如果您必须更新讨论板,请在显示逻辑中而不是在数据库中进行更新,这样您就不会犯无法挽回的错误

  • 用perl或您最喜欢的文本处理语言language编写一个脚本,它对每个表/字段执行正则表达式替换。我建议采取以下战略:

    a。执行
    选择id,从中选择“%domain.de%”之类的id

    b。以CSV或其他易于解析的格式存储输出

    c。运行正则表达式脚本将domain.de更改为domain.com

    d。检查输出

    e。是否执行
    更新集=?其中id=?
    ,带有脚本的输出

    首先要分小块进行(一次几十篇或几百篇文章),并在将更改提交到数据库之前目视检查结果,以确保没有犯错误


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

    下面的查询将提供表列表(120个表)

    下一个 可以对每个表使用更新查询。您可以使用


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

    写一个脚本来实现它?您需要遍历每个表、行和列。当然,在对实时数据执行此操作之前,您应该在副本上尝试此操作,以确保其正常运行。您需要根据运行所需的时间、在实时数据库上运行这样一个脚本是否可以接受(因为在脚本运行时,您将有多个域),或者是否需要停机来做出决定。顺便说一句,我会使用PHP或类似的脚本语言来完成这一切。@halfer:等等,你是说没有特殊的SQL命令来完成这一切吗?:)@塞尔吉奥图兰采夫-我真的不想成为坏消息的传递者
    :p
       SELECT DISTINCT table_name
       FROM
       (
         SELECT *
         FROM information_schema.`COLUMNS` C
       ) t1
       WHERE TABLE_SCHEMA='schema_name'