Magento 1.7如何删除现有的多余网站和商店

问题描述:

在我正在从事的一个大型Magento项目(从以前的机构继承),该安装在18个网站上有41家商店。Magento 1.7如何删除现有的多余网站和商店

该网站有40K产品和5K类别 - 所以你可以想象数据库是臃肿无法相信。

我想删除除2个网站和2个商店视图(每个网站一个)以外的所有视图,但使用GUI失败 - 删除商店视图时页面变为空白。虽然数据库确实从core_store表中删除了存储,但它感觉很脆弱。我也无法删除其网站的默认商店视图 - 即使所涉及的网站不是安装的默认商店视图。

试图删除一个网站给'一个'目前无法删除网站,请稍后再试'。

有没有一种干净,安全的方式,直接从数据库中删除所有多余的商店,他们的父网站和所有与他们相关的数据?

谢谢。

谢谢您的反馈。

我在我们的沙箱环境中玩过各种方法,并且从core_store表中删除记录确实会级联,所以这很有效。

1注意其他人这样做;在删除所有商店后,在执行完整的reindex(定价表的FK约束)之前,您将无法删除多余的core_websites记录。

在修整除2个商店和2个网站以外的所有数据库后,整个数据库已经减少了30%的大小,core_url_rewrite表中最大的赢 - 从125万条记录下降到相对轻量级的32.5万条记录!类别页面加载时间现在平均快2秒。流下那些多余的Magento商店Mage People :)

再次感谢您的帮助。

通过数据库手动完成。如果你从core_store表(即删除存储)执行此操作,我认为它将确保与商店相关的其他表中的任何记录也被删除。这将对你的数据库产生巨大的影响,并且需要花费大量的时间,因为magento中的大部分内容都引用了一个商店标识,并根据你的数字进行分析,这样你就可以获得大量的数据来处理关系了。确保在执行任何操作之前先备份数据库,禁用任何索引并在执行这些操作时停止写入数据。我会建议一次做一个商店并检查结果,并且您仍然可以运行索引等。

其他选项当然是启动一个新的数据库实例(即仅将复制结构复制到新的数据库)并仅传输你想要的旧数据加入到新数据中。祝你好运。 :-)

+0

我认为这是最好的过程,因为从所有的网站我们只需要2个网站。因此,导出这两个商店的数据并创建一个新的数据库并进行配置并不是一件坏事。您的建议很好。我为你投票.. –

+0

降选民关心评论请? – Ashley

“最安全”的方法是通过系统>管理商店删除商店。你说过一段时间后你会得到一个白页。您可能已经耗尽内存或页面执行时间。尝试检查你的错误日志,看看你是否可以通过这个。

或者,您可以删除/删除数据库中的表/记录。执行完全备份后,采取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表。

我自己正在面对同样的任务,在我遗留的遗留系统上。我的删除实际商店的过程非常简单:只需进入数据库并从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