2009-09-18 153 views
5

我環顧了這個Wordpress論壇,並沒有找到任何東西,所以我想我可能會在這裏嘗試。WordPress的數據庫遷移

如果您有用於測試新插件的staging/dev Wordpress設置等,您如何將暫存數據庫中的數據遷移回生產數據庫?有沒有「Wordpress最佳實踐」的方式來做到這一點,或者我僅限於手動將表格從一個數據庫遷移到另一個數據庫?

回答

1

也許你只是在尋找錯誤的東西。備份插件不會輕易處理這個問題嗎?我知道它們適用於所有大型CMS軟件包...

1

這兩種方法將使用工具下的導出/導入功能或複製數據庫。我每週使用WordPress數據庫備份插件給自己發送一份我的生產數據庫。

導入功能對於移動wordpress博客可能會有問題,因爲您必須經常配置php.ini文件,因爲默認情況下,您可以在託管php實現上載的文件的默認值往往太小。

1

我想從生產wordpress網站上將數據庫從我的臺式機上拖到離線開發副本中,這樣我就可以修改網站並用 全套現有博客內容和歷史進行測試。

這被證明是有問題的,因爲簡單地對數據庫進行離線備份並將其導入本地開發數據庫不起作用。

克服將數據從生產數據移動到開發數據庫的這些問題可能也可能用於其他方式 - 所以我認爲您可以將這些準則用於您想要執行的操作 - 只需從開始開發數據並將其移至prod。這裏

的問題是:

  1. 爲 博客文章都存儲在數據庫 ,因爲他們會爲 在線版本的永久鏈接名稱,但我的離線複製 不在域名地址,而不是 它位於localhost目錄中。所以 當我在本地推出該網站時, 雖然css格式和 圖片全部到位(圖片 鏈接是相對的),實際 博客文章沒有顯示。
  2. 許多整個 站點鏈接的鏈接的退了出去到互聯網, 所以如果你嘗試導航到 檔案,或評論,或 類別或主要崗位,你 送回到到互聯網而不是停留在本地機器上的數據庫 中。

爲了確保我這樣做正確,我吹掉了我在本地機器上的wordpress安裝並重新啓動。

我曾有過一個乾淨,新的WordPress的安裝和全新的默認新創建的本地數據庫,我在phpMyAdmin打開了數據庫,並採取了看看wp_posts

表。在那裏,每個記錄(換句話說,每個帖子)都有一個標題爲「guid」的列,它顯示了該帖子的位置。例如,第一個在一個新的,默認

安裝包含此「GUID」值:

http://localhost/wordpress/?p=1 

如果您在您的在線版本的wp_posts表看,你會看到,而不是在這個位置網址到您的網站在線。

您不能將批量導入到本地安裝,因爲您將導入所有這些外部引用。它會使你的本地版本無法在本地導航。

因此,我創建了我的在線網站數據庫的備份副本,並將其保存在本地作爲.sql文件。然後,我用文本編輯器打開了該文件(我使用了notepad ++,這是一款很棒的免費軟件,但您可以使用任何文本編輯器)。事情我需要看出來:

  • 無論出於何種原因,我 在線網站的表不僅僅是,例如, 「wp_posts」 - 他們是 「wp_something_posts」 ......有 表名中有一些額外的字母。
  • 到http任何引用:包含我的在線網址,而不是本地主機/ WordPress的// ...

爲了簡單起見,讓我們只是做只是職位。在您的聯機數據庫的.sql的備份副本中,找到wp_posts表的開頭。它看起來像這樣:

-- 

-- Table structure for table `wp_posts` 

-- 



DROP TABLE IF EXISTS `wp_posts`; 

CREATE TABLE `wp_posts` (

...等等。突出顯示文件頂部標記數據庫開頭的註釋(它會說 - 數據庫:'您的數據庫名稱')之上的所有內容並將其刪除。然後轉到wp_posts表的末尾,然後將所有內容都刪除,直到文件的底部。現在你的文件只包含你的帖子,沒有別的。

將其保存爲單獨的文檔。叫它posts.sql或類似的東西。

現在,在這個posts.sql文件中,您需要執行兩個查找/替換操作。

  1. 找到 表wp_something_posts和 名稱的每個實例與wp_posts更換。如果您的在線數據庫的備份副本 不是 與您的乾淨的本地安裝相匹配,那麼您只需要 即可。你想 無論表名是在這個 文件,以匹配你的本地 安裝的wordpress數據庫有 這個表名。如果你沒有製作這些名字 ,那麼你只是 最後會將帖子 導入一個不同名字的新表 ,這對你在 全部沒用。
  2. 查找http://的每個實例... (替換URL中省略號) 與 http://localhost/wordpress更換(或 無論本地URL到您的開發 版本的網站是)

現在再次保存此文件,以確保你」已經設置了這些更改。

現在你已經這樣做了,使用phpMyAdmin進入你的本地計算機上的WordPress數據庫,選擇「導入」選項卡,選擇瀏覽到您剛纔提出的posts.sql文件,然後導入它。這會將該文件中的所有數據放入本地wp_posts表中。

完成後,瀏覽當地的wordpress網站。你現在會看到你所有的帖子。萬歲!

您可能需要做其他幾桌類似的東西,如果你想在你的註釋,標記,類別和靜態頁面,使您創建等

我意識到這是一個令人費解的過程。在那裏可能有一個工具可以讓這個活動更容易,如果有人知道一個我想知道的。如果有人知道比我描述的更好的手動操作方式,我也很想知道!

在此之前,這是我想出如何去做的方式。希望它能幫助你朝着正確的方向前進。

3

我有一個腳本,mysqldumps我生產的Wordpress數據庫的副本,恢復它在我的測試WordPress的安裝&然後更正測試數據庫中的所有「生產」設置&網址。

我的生產&測試數據庫生活在同一臺服務器上,但你可以更改mysqldump設置從遠程mysql服務器轉儲&很容易還原到本地服務器。

這裏是我的腳本:

overwrite_test.coach_db_with_coache_db.sh

#!/bin/bash 
dbUser="co*******" 
dbPassword="*****" 
dbSource="coach_production" 
dbDest="coach_test" 
tmpDumpFile="/tmp/$dbSource.sql" 

mysqldump --add-drop-table --extended-insert --user=$dbUser --password=$dbPassword --routines --result-file=$tmpDumpFile $dbSource 
mysql --user=$dbUser --password=$dbPassword $dbDest < $tmpDumpFile 
mysql --user=$dbUser --password=$dbPassword $dbDest < /AdminScripts/change_coach_to_test.coach.sql 

change_coach_to_test.coach.sql

-- Change all db references from @oldDomain to @newDomain 

SET @oldDomain = 'coach.co.za'; 
SET @newDomain = 'test.coach.co.za'; 
SET @testUsersPassword = 'password'; 

UPDATE `wp_1_options` SET `option_value` = REPLACE(`option_value`,@oldDomain,@newDomain) WHERE `option_name` IN ('siteurl','home','fileupload_url'); 
UPDATE `wp_1_posts` SET `post_content` = REPLACE(`post_content`,@oldDomain,@newDomain); 
UPDATE `wp_1_posts` SET `guid` = REPLACE(`guid`,@oldDomain,@newDomain); 
UPDATE `wp_blogs` SET `domain` = @newDomain WHERE `domain` = @oldDomain; 
UPDATE `wp_users` SET `user_pass` = MD5(@testUsersPassword); 

-- Only valid for main wpmu site 
UPDATE `wp_site` SET `domain` = @newDomain WHERE `domain` = @oldDomain; 
0

這大概總結了與WordPress的問題核心架構......但我寫了一個解決問題的插件有域名和絕對URL MS存儲在數據庫中:

http://wordpress.org/extend/plugins/root-relative-urls/

這將解決由@oddbill概括的問題。儘管不要過多關注GUID列中的url,因爲該字段從未用於鏈接生成。

@markratledge提供了一些鏈接到一些冗長的文件,基本上這樣說:

//出口

mysqldump -u[username] -p[password] [database] > backup.sql

//進口

mysql -u[username] -p[password] [database] < backup.sql

你如果您從分段推送到產品,則需要排除comments/comments_meta表格不會丟失你所有的評論和引用(@DavidLaing的方法會將這些內容全部清除掉)。而且這種做法假設你只是在暫存環境中進行內容更改。如果您想在生產環境和暫存環境中進行更改,則需要編寫同步數據而不是批量覆蓋數據的腳本......祝您好運,可以建議在投資之前添加創建&修改過的時間戳列與當前模式有太多時間。

最後,@ RussellStuever的方法適用於大多數情況,只要確保知道何時瀏覽您的主機映射網站與您的生產網站。而且確實可以確定,因爲有些瀏覽器會在幾天內緩存dns查找,直到您實際關閉它們並開始一個新進程。交換主機可能需要一些時間,經常切換可能會令人沮喪。如果您需要使用iPhone進行測試,則需要首先在網站上直接發佈該網站,或者使用能夠將出站Internet請求重新映射到本地服務器的良好路由器,因爲您無法在大多數移動設備上修改主機文件。

我的插件可以讓你開發和測試http://localhost/http://staging.server.local/http://www.production.com沒有任何常見的陷阱。然後遷移數據,就像導出和導入數據一樣簡單,沒有搜索&替代必要的步驟或數據庫設置調整。

並且不依賴於導入/導出工具,它不會捕獲典型wordpress安裝中的所有內容,並且仍然需要進行不必要的搜索&替換步驟。

0

您需要處理序列化的對象。這是一個client side HTML5 utility來處理它。因爲它全是javascript,所以速度很快。

替代方法是將bash腳本掛接到您的部署中。因此,一旦部署了該站點,數據庫就會被備份並通過新域進行反序列化。