2012-12-06 58 views
2

我有大约80个WordPress博客,里面写了我的各种网站。我想更新所有数据库中的所有帖子,查看特定的文本字符串,在这个例子中是域名。如何一次运行所有数据库上的sql命令?

该脚本在一个数据库上工作得很好,但我需要对所有数据库进行一些更改,这些更改只需要很长时间。

我需要能够同时在每个数据库上运行这些命令,而不是一次运行一个数据库。

我的脚本,因为它的工作原理目前单个数据库上:

UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://www.old-domain.com', 'http://mixudo.com'); 

非常感谢

回答

0
  1. 创建用户名数据库名称/你所需要的脚本密码列表要执行上
  2. 对于此列表中的每个数据库,请执行以下操作:
  3. 登录到该数据库并选择它
  4. 在该数据库上运行脚本

这是安全地完成任务的唯一方法。

+0

感谢但这正是我想避免:) 我在情况下,它发生可怕的事情备份... – user1883682

+1

如果你决定这样做,记得PHP的参数或者set_time_limit (),特别是如果你有这么多的数据库。 – mushroom

+0

@ user1883682 - 你将不得不咬住子弹。 1show数据库“可以给你一个开始的列表。 –

0

您可以使用SHOW DATABASES命令获取mysql服务器上的数据库列表。使用输入你可以写在你有能力将的foreach()通过数据库列表,并运行在每个UPDATE语句,通过执行

use DBNAME; 

其中dbname是在变量任何一种语言,shell脚本该foreach。更新语句应该在所有的数据库上都是一样的,因为我认为每个数据库都有一组相同的表格,每个表格都有相同的表名。

对于Ed Heal的观点,这也假设您使用root/admin用户作为服务器,以便它有权更新所有表。

+0

您可以使用我的脚本示例提供一个作为sql文件运行的示例吗?谢谢! – user1883682

+0

大概不是盲目使用'show databases'的好主意。我只是得到清单,然后手动检查/编辑,以确保我们不添加系统和其他不应包含的系统。 –

+0

谢谢,系统上只有wordpress数据库,它是专门为这些站点服务的服务器。 我可以做一个足够简单的文件,我可以对字符串进行更改,但可以在所有数据库上运行,所以我没有像对50个数据库进行50次更改一样。谢谢:) – user1883682

0

尝试执行这个查询:

SELECT CONCAT('UPDATE ', 
schema_name, '.\'wp_posts\' SET \'post_content\' = REPLACE(post_content, \'http://www.old-domain.com\', \'http://mixudo.com\');') 
FROM information_schema.schemata 
WHERE schema_name NOT IN ('information_schema','mysql','performance_schema','phpmyadmin', 'webauth'); 

,然后重新执行结果。

来源:https://dba.stackexchange.com/a/20251

相关问题