【问题标题】:Magento 1.7 How To Delete Existing Superfluous Websites and StoresMagento 1.7 如何删除现有多余的网站和商店
【发布时间】:2014-03-24 17:04:40
【问题描述】:

在我正在处理的一个大型 Magento 项目中(从以前的代理机构继承),该装置在 18 个网站上拥有 41 家商店。

该网站有 40k 种产品和 5k 个类别 - 可以想象,数据库膨胀得令人难以置信。

我想删除除 2 个网站和 2 个商店视图(每个网站一个)之外的所有网站,但使用 GUI 失败 - 删除商店视图时页面变为空白。尽管 db 确实从 core_store 表中删除了存储,但感觉很不稳定。我也无法删除其网站的默认商店视图 - 即使有问题的网站不是安装的默认值。

尝试删除网站时提示“目前无法删除该网站,请稍后再试”。

是否有一种干净、安全的方法可以直接从数据库中删除所有多余的商店、它们的父网站以及与其关联的所有数据?

谢谢。

【问题讨论】:

    标签: mysql magento magento-1.7


    【解决方案1】:

    在我继承的遗留系统上,我自己也面临着同样的任务。我删除实际存储的过程非常简单:只需进入数据库并从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' 
    

    Steve Robbins 提到,即使在删除这些内容之后,您最终也会得到许多“孤立”记录,这些记录并没有被这种级联删除删除。以下是我在删除网站/商店后(主要是手动)清理的内容列表。

    • 客户群(每个客户群都有自己的价格指数;导致巨大的数据库膨胀)
    • 产品

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

    • 类别
    • 目录规则

      DELETE FROM catalogrule WHERE rule_id NOT IN (SELECT DISTINCT rule_id FROM catalogrule_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 IS NULL

    我希望这将为其他进行多商店清理的人提供有用的信息。我计划更新这个答案,因为我找到了更有效的清理方法。

    【讨论】:

    • 非常有用的答案埃里克。此外,在我们的案例中,我们不想删除您所做的一些事情,但它仍然非常有帮助。谢谢。
    • 我收到错误错误代码:1146。表“my_magento.referential_constraints”不存在
    • @Haim 该查询需要在information_schema 数据库上运行。该错误表明您正在 Magento 数据库上运行它。
    • @eric,正确-谢谢。知道我们将如何删除订单和相关数据吗?
    • 虽然我通常不建议删除订单数据,但我知道在某些情况下可能需要这样做。我在答案中添加了一个查询。
    【解决方案2】:

    通过数据库手动执行。如果您从 core_store 表执行此操作(即删除存储),我认为它将确保与存储相关的其他表中的任何记录也被删除。这将在您的数据库上占用大量时间并花费大量时间,因为 magento 中的大多数内容都引用了商店 ID,并且根据您的数字,您将拥有大量数据来计算关系。确保在执行任何操作之前先备份数据库,禁用任何索引并在执行这些操作时停止写入任何数据。我建议一次做一家商店并检查结果,您仍然可以运行索引等。

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

    【讨论】:

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

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

    或者,您可以删除/删除数据库中的表/记录。进行完整备份后,用

    查看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 表。

    【讨论】:

      【解决方案4】:

      感谢您的反馈。

      我在我们的沙盒环境中使用了各种方法,从 core_store 表中删除记录确实是级联的,所以效果很好。

      给其他人的1条注释;删除所有商店后,您将无法删除多余的 core_websites 记录,直到您执行完整的重新索引(定价表的 FK 约束)。

      除了 2 个商店和 2 个网站之外,整个数据库的大小缩减了 30%,其中 core_url_rewrite 表中的最大优势 - 从 125 万条记录减少到相对轻量级的 325k!类别页面加载时间现在平均快 2 秒。摆脱那些多余的 Magento 商店 Mage People :)

      再次感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-21
        • 1970-01-01
        • 1970-01-01
        • 2012-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多