2014-03-24 68 views
1

在我正在從事的一個大型Magento項目(從以前的機構繼承),該安裝在18個網站上有41家商店。Magento 1.7如何刪除現有的多餘網站和商店

該網站有40K產品和5K類別 - 所以你可以想象數據庫是臃腫無法相信。

我想刪除除2個網站和2個商店視圖(每個網站一個)以外的所有視圖,但使用GUI失敗 - 刪除商店視圖時頁面變爲空白。雖然數據庫確實從core_store表中刪除了存儲,但它感覺很脆弱。我也無法刪除其網站的默認商店視圖 - 即使所涉及的網站不是安裝的默認商店視圖。

試圖刪除一個網站給'一個'目前無法刪除網站,請稍後再試'。

有沒有一種乾淨,安全的方式,直接從數據庫中刪除所有多餘的商店,他們的父網站和所有與他們相關的數據?

謝謝。

回答

0

謝謝您的反饋。

我在我們的沙箱環境中玩過各種方法,並且從core_store表中刪除記錄確實會級聯,所以這很有效。

1注意其他人這樣做;在刪除所有商店後,在執行完整的reindex(定價表的FK約束)之前,您將無法刪除多餘的core_websites記錄。

在修整除2個商店和2個網站以外的所有數據庫後,整個數據庫已經減少了30%的大小,core_url_rewrite表中最大的贏 - 從125萬條記錄下降到相對輕量級的32.5萬條記錄!類別頁面加載時間現在平均快2秒。流下那些多餘的Magento商店Mage People :)

再次感謝您的幫助。

1

通過數據庫手動完成。如果你從core_store表(即刪除存儲)執行此操作,我認爲它將確保與商店相關的其他表中的任何記錄也被刪除。這將對你的數據庫產生巨大的影響,並且需要花費大量的時間,因爲magento中的大部分內容都引用了一個商店標識,並根據你的數字進行分析,這樣你就可以獲得大量的數據來處理關係了。確保在執行任何操作之前先備份數據庫,禁用任何索引並在執行這些操作時停止寫入數據。我會建議一次做一個商店並檢查結果,並且您仍然可以運行索引等。

其他選項當然是啓動一個新的數據庫實例(即僅將複製結構複製到新的數據庫)並僅傳輸你想要的舊數據加入到新數據中。祝你好運。 :-)

+0

我認爲這是最好的過程,因爲從所有的網站我們只需要2個網站。因此,導出這兩個商店的數據並創建一個新的數據庫並進行配置並不是一件壞事。您的建議很好。我爲你投票.. –

+0

降選民關心評論請? – Ashley

1

「最安全」的方法是通過系統>管理商店刪除商店。你說過一段時間後你會得到一個白頁。您可能已經耗盡內存或頁面執行時間。嘗試檢查你的錯誤日誌,看看你是否可以通過這個。

或者,您可以刪除/刪除數據庫中的表/記錄。執行完全備份後,採取core_store了一眼,

show create table core_store 

在最後幾行,你應該看到類似

CONSTRAINT `FK_CORE_STORE_GROUP_ID_CORE_STORE_GROUP_GROUP_ID` FOREIGN KEY (`group_id`) REFERENCES `core_store_group` (`group_id`) ON DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT `FK_CORE_STORE_WEBSITE_ID_CORE_WEBSITE_WEBSITE_ID` FOREIGN KEY (`website_id`) REFERENCES `core_website` (`website_id`) ON DELETE CASCADE ON UPDATE CASCADE 

ON DELETE CASCADE意味着它會去那些表引用,並刪除相關記錄也是如此。

如果您手動刪除一行core_store它將採取其他數據。但是,它仍然缺少很多。您可能最終會在CMS頁面,塊,產品,類別,根目錄,客戶,訂單等中導致孤立數據。

請記住,還要擺脫相關的category_flatproduct_flat表。

3

我自己正在面對同樣的任務,在我遺留的遺留系統上。我的刪除實際商店的過程非常簡單:只需進入數據庫並從core_website刪除該行。這將觸發級聯刪除,其中刪除core_storestore_group中的相應記錄,觸發任何商店/網站範圍的EAV值的另一個級聯刪除以及各種其他事情。你可以找到通過運行此查詢的完整列表(代替your_magento_database代替你的數據庫名):

SELECT table_name 
FROM referential_constraints 
WHERE constraint_schema = 'your_magento_database' 
     AND referenced_table_name IN('core_store', 'core_website') 
     AND delete_rule = 'CASCADE' 

史蒂夫羅賓斯提到,即使刪除這些事情後,你就會有很多的「孤立」記錄,其AREN不會因級聯刪除而被刪除。下面列出了我在清除網站/商店後經歷的事情(主要是手動)。

  • 顧客羣體(每個客戶羣得到其自己的價格指數;造成巨大數據庫膨脹)
  • 產品

    DELETE FROM catalog_product_entity WHERE entity_id NOT IN (SELECT product_id FROM catalog_product_website);

  • 類別
  • 目錄規則

    ​​條

  • 購物車價格規則

    DELETE FROM salesrule WHERE (rule_id NOT IN (SELECT DISTINCT rule_id FROM salesrule_website));

  • 配置數據(貌似Magento的1。9刪除了這些自動的,但這裏有一個查詢確認)

    SELECT * FROM core_config_data WHERE (scope="stores" AND scope_id NOT IN (SELECT store_id FROM core_store)) OR (scope="websites" AND scope_id NOT IN (SELECT website_id FROM core_website));

  • CMS頁面

    DELETE FROM cms_page WHERE page_id NOT IN (SELECT DISTINCT page_id FROM cms_page_store);

  • 靜態塊

    DELETE FROM cms_block WHERE block_id NOT IN (SELECT DISTINCT block_id FROM cms_block_store);

  • 控件實例
  • 平類/產品表
  • 電子郵件模板
  • 稅法規定,稅務類,稅率
  • 管理用戶,管理角色
  • API用戶
  • 訂單:我更願意放棄這些,因爲性能優勢很小,並且您稍後可能需要這些數據,但只有您知道什麼對您的項目最適合。

    DELETE FROM sales_flat_order WHERE store_id NOT IN (SELECT store_id FROM core_store);

我希望這將成爲有用的信息,爲別人做了多店清理。我計劃更新這個答案,因爲我發現了更有效的清理方法。

+0

非常有用的答案埃裏克。另外,在我們的例子中,我們不想刪除你所做的一些事情,但它仍然非常有幫助。謝謝。 – camdixon

+0

我收到錯誤錯誤代碼:1146.表'my_magento.referential_constraints'不存在 – Haim

+0

@Haim該查詢需要在'information_schema'數據庫上運行。該錯誤表明您正在Magento數據庫上運行它。 – Eric

相關問題