2012-12-06 57 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

相關問題