【问题标题】:Magento upgrade takes too long and never completesMagento 升级耗时太长且永远无法完成
【发布时间】:2012-10-21 06:13:48
【问题描述】:

我正在将 magento 从 1.4.0.1 升级到 1.7.0.2。最初有一些错误;修复这些之后,现在升级运行了 5 个小时并且永远不会完成。没有错误显示。知道为什么会这样吗?

【问题讨论】:

  • 你用什么方法更新?最好的方法是恕我直言,用最新的 Magento 替换所有文件,再次运行安装脚本,然后重新安装扩展(在管理员中,或者最好使用版本控制)。
  • 我正在使用手动方法。将旧文件添加到新磁电机,将旧数据库导入新数据库,然后运行应用程序并尝试修复问题。这和你的方法有区别吗?
  • 在你提到的方法中,新版本安装后会有新的数据库,因此旧的记录(订单、发票、客户)会丢失。
  • 我认为我们的方法是一样的。我用我的方法使用旧数据库。您可以尝试使用小版本步骤升级 magento。每个版本,都会执行不同的查询来更新数据库。随着逐步更新,您会发现哪个版本导致了麻烦。祝你好运。

标签: php magento


【解决方案1】:

我最近将客户端 magento 从 V1.4 升级到 V1.7.2.0,我按照以下步骤操作:- 以下是将网站从 Magento v1.4.0.0 升级到 v1.7.2.0 的要点:-

  1. 以压缩格式收集实时数据库备份,不包括下表:-

    • “log_customer”
    • “log_quote”
    • “log_summary”
    • “log_url”
    • “log_url_info”
    • “log_visitor”
    • “log_visitor_info”

    “log_visitor_online”

  2. 将压缩后的备份数据库解压缩到您自己的文件系统中的任何文件夹中。

  3. 启动本地 WAMP / XAMPP,并使用网络应用“phpMyAdmin”创建测试数据库“test_something”或任何其他名称。

  4. 打开命令提示符窗口,然后键入“mysql”以启动 MySQL 命令提示符。

  5. 将解压后的数据库导入测试数据库,使用命令提示符,这样会快很多,不会出错。

  6. 导入成功后,从phpMyAdmin运行“DB Changes.txt”文件中提到的SQL。

  7. 在本地 WAMP / XAMPP 中提取一个新的 Magento v1.7.2.0,然后使用带有旧现场数据的测试数据库开始安装这个 Magento。

  8. 成功安装 Magento 后,使用命令提示符以压缩格式导出和转储新升级的数据库,这样会更快,不会出现任何错误。

  9. 解压新压缩的 Magento 或将 v1.7.2.0 的新解压 Magento 上传到实时服务器的文件系统中,无需安装任何东西。

  10. 将此压缩后的数据库上传到直播服务器的文件系统,然后打开直播服务器的 PuTTY。

  11. 上传本地 WAMP / XAMPP 的“app/etc/local.xml”Magento 文件的副本,以替换实时 Magento 的“app/etc/local.xml”文件。请记住在将其上传到实时服务器之前,根据新的实时服务器更改此文件的所有数据库凭据。

  12. 记住不要从 Web 浏览器浏览 Magento 以获取实时 Web 服务器,直到第 14 点完成。

  13. 使用PuTTY命令,将压缩后的数据库解压,然后导入到直播网站的新数据库中。

  14. 导入成功后,搜索“core_config_data”数据库表,“path”列值为“%base_url%”。将“value”列的所有值替换为活动站点“http://www.livesite.com/”的完整 URL,而不提及“index.php”。

  15. 将主题及其相关文件上传到新服务器的文件系统。

  16. 上传扩展/模块检查那里的兼容性。

  17. 确保在系统配置中配置所需的模块来自管理面板。

    DB Changes.txt 如下:- 如果不存在则创建表 log_customer ( log_id int(10) 无符号非空 AUTO_INCREMENT, visitor_id bigint(20) 无符号默认空值, customer_id int(11) NOT NULL DEFAULT '0', login_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00', logout_at 日期时间默认为空, store_id smallint(5) 无符号非空, 主键 (log_id), 键IDX_VISITOR (visitor_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户日志信息';


    --

    -- 表log_quote的表结构

    如果不存在则创建表log_quote ( quote_id int(10) unsigned NOT NULL DEFAULT '0', visitor_id bigint(20) 无符号默认空值, created_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00', deleted_at 日期时间默认为空, 主键 (quote_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='引用日志数据';


    --

    -- 表log_summary的表结构

    如果不存在则创建表 log_summary ( summary_id bigint(20) 无符号非空 AUTO_INCREMENT, store_idsmallint(5) 无符号非空, type_idsmallint(5) 无符号默认空值, visitor_count int(11) NOT NULL DEFAULT '0', customer_count int(11) NOT NULL DEFAULT '0', add_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 主键 (summary_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Summary log information';


    --

    -- 表log_url的表结构

    如果不存在则创建表 log_url ( url_id bigint(20) unsigned NOT NULL DEFAULT '0', visitor_id bigint(20) 无符号默认空值, visit_time datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 主键 (url_id), 键IDX_VISITOR (visitor_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='URL 访问历史记录';


    --

    -- 表log_url_info的表结构

    如果不存在则创建表log_url_info ( url_id bigint(20) 无符号非空 AUTO_INCREMENT, url varchar(255) NOT NULL DEFAULT '', referer varchar(255) 默认为空, 主键 (url_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='关于url访问的详细信息';


    --

    -- 表log_visitor的表结构

    如果不存在则创建表log_visitor ( visitor_id bigint(20) 无符号非空 AUTO_INCREMENT, session_id char(64) NOT NULL DEFAULT '', first_visit_at 日期时间默认为空, last_visit_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00', last_url_id bigint(20) unsigned NOT NULL DEFAULT '0', store_id smallint(5) 无符号非空, 主键 (visitor_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统访问者日志';


    --

    -- 表log_visitor_info的表结构

    如果不存在则创建表log_visitor_info ( visitor_id bigint(20) unsigned NOT NULL DEFAULT '0', http_referer varchar(255) 默认为空, http_user_agent varchar(255) 默认为空, http_accept_charset varchar(255) 默认为空, http_accept_language varchar(255) 默认为空, server_addr bigint(20) 默认为空, remote_addr bigint(20) 默认为空, 主键 (visitor_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='访客的附加信息';


    --

    -- 表log_visitor_online的表结构

    如果不存在则创建表 log_visitor_online ( visitor_id bigint(20) 无符号非空 AUTO_INCREMENT, visitor_type char(1) 非空, remote_addr bigint(20) 非空, first_visit_at 日期时间默认为空, last_visit_at 日期时间默认为空, customer_id int(10) 无符号默认空值, last_url varchar(255) 默认为空, 主键 (visitor_id), 键IDX_VISITOR_TYPE (visitor_type), 键IDX_VISIT_TIME (first_visit_at,last_visit_at), 键IDX_CUSTOMER (customer_id) ) ENGINE=InnoDB 默认字符集=utf8;

    截断report_event;

    截断report_viewed_product_index;

    截断report_compared_product_index;

    截断dataflow_batch_export;

    ALTER TABLE orders CHANGE url parent_id VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;

【讨论】:

  • 我的数据库大小在 gunzip 中约为 52 MB,正常为 926 MB,从 v1.4 升级到 V1.7.2 大约需要 3 小时
  • 第 6 点:“DB Changes.txt”在哪里?
【解决方案2】:

I 在查询日志中通过更改 lib\Varien\Db\Adapter\Pdo\Mysql.php 文件中的以下行

protected $_debug               = true;
protected $_logAllQueries       = true;
protected $_debugFile           = 'var/debug/pdo_mysql.log';

然后通过分析 pdo_myql.log 文件,我知道执行查询时出错,因此 magento 安装程序会一次又一次地运行它。

错误是。

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ''11199-1' for key 'UNQ_INCREMENT_ID'

所以我删除了数据库表和 pdo_mysql.log 中的条目,现在正在显示其他查询并且升级已完成。

在 magento 升级上工作了很多天,我正在总结将 magento 从 1.4.0.1 成功升级到 1.7.0.2 的步骤。其他项目显示的这些错误会有所不同,因为每个项目都有不同的数据。

  1. 为新版本创建一个新数据库。 (我在用 SQLyog,因为它适用于大型数据库的导入和导出)。

  2. wwwhtdocs 中提取并安装新版本 1.7.0.1。 我的项目名称是 ma​​gento171

  3. 创建新数据库,因为我们在repair step中需要fresh db

  4. 旧数据库数据导入新数据库

  5. 在新安装的 magento 版本中更改 etc/local.xml 中的 new database 名称。

  6. etc/local.xml 中找到 SET NAMES utf8 并将其更改为 SET NAMES utf8;设置 FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; .

  7. 在新版本的 magento 中复制旧项目文件。我有主题 空白文件夹。如果您有默认模板文件,则复制默认值 文件夹。

    • 应用\设计\前端\默认\空白

    • 应用\代码\本地

    • 皮肤\前端\默认/空白

    • app\etc\modules(复制新版本中没有的文件)。

  8. 通过更改以下行在 MySql 查询日志记录中 lib\Varien\Db\Adapter\Pdo\ Mysql.php

     protected $_debug               = true;
     protected $_logAllQueries       = true;
     protected $_debugFile           = 'var/debug/pdo_mysql.log';
    
  9. 搜索和更改 CREATE TABLECREATE TABLE IF NOT EXISTS 在 code/core/mage/ 中。

  10. 更改表 core_config_data 中的以下条目(使用您的 项目文件夹名称)。

      • web/unsecure/base_url | http://localhost/magento171/
      • web/secure/base_url   | http://localhost/magento171/
    
  11. /errors/local.xml.sample 重命名为 /errors/local.xml 以启用 error_reporting。

  12. 通过删除 var\cache 中的所有数据来清除 magento 缓存。

  13. 转到浏览器并键入您的项目路径。 http://localhost/magento171/ 并密切关注浏览器和 var/debug/pdo_mysql.log 文件。

  14. 我遇到的第一个错误是:文件中的错误: "D:\xampp\htdocs\magento171\app\code\core\Mage\Sales\sql\sales_setup\mysql4-upgrade-1.3.99-1.4.0.0.php"

    • SQLSTATE[23000]:违反完整性约束:1062 键“PRIMARY”的重复条目“7”

    修复:我从 pdo_mysql.log 文件中发现问题出在 sales_flat_order 表中,这意味着存在许多重复的主键条目,因此我截断了所有销售表。这实际上是我的旧数据库中的错误。在新版本中,increment_id 是唯一的。我们不能跳过主键检查,所以我截断了所有与销售相关的表。如果您有相同的问题,则截断与该功能相关的所有表,例如如果在客户中重复则截断所有客户表,或者如果在目录中则截断目录表。但是请记住,应该在发生错误时进行截断,因为如果在安装开始之前截断,安装程序将不会读取现有数据,最后您会丢失一些记录,例如丢失一些订单或发票。

    SET FOREIGN_KEY_CHECKS = 0;
    TRUNCATE `sales_flat_creditmemo`;
    TRUNCATE `sales_flat_creditmemo_comment`;
    TRUNCATE `sales_flat_creditmemo_grid`;
    TRUNCATE `sales_flat_creditmemo_item`;
    TRUNCATE `sales_flat_invoice`;
    TRUNCATE `sales_flat_invoice_comment`;
    TRUNCATE `sales_flat_invoice_grid`;
    TRUNCATE `sales_flat_invoice_item`;
    TRUNCATE `sales_flat_order`;
    TRUNCATE `sales_flat_order_address`;
    TRUNCATE `sales_flat_order_grid`;
    TRUNCATE `sales_flat_order_item`;
    TRUNCATE `sales_flat_order_payment`;
    TRUNCATE `sales_flat_order_status_history`;
    TRUNCATE `sales_flat_quote`;
    TRUNCATE `sales_flat_quote_address`;
    TRUNCATE `sales_flat_quote_address_item`;
    TRUNCATE `sales_flat_quote_item`;
    TRUNCATE `sales_flat_quote_item_option`;
    TRUNCATE `sales_flat_quote_payment`;
    TRUNCATE `sales_flat_quote_shipping_rate`;
    TRUNCATE `sales_flat_shipment`;
    TRUNCATE `sales_flat_shipment_comment`;
    TRUNCATE `sales_flat_shipment_grid`;
    TRUNCATE `sales_flat_shipment_item`;
    TRUNCATE `sales_flat_shipment_track`;
    SET FOREIGN_KEY_CHECKS = 1;
    
  15. 安装时间太长,所以我检查了pdo_mysql.log文件,下面的错误一再显示。显示的错误:SQLSTATE [23000]:完整性约束违规:1062 键“UNQ_INCREMENT_ID”的重复条目“11199-1” 使固定: 所以我删除了表中的第一个条目。

  16. 数据库修复步骤:需要使用ma​​gento-db-repair-tool-1.1(http:// /www.magentocommerce.com/wiki/1_-_installation_and_configuration/db-repair-tool)。报告将在最后显示所有修复。

  17. 现在您可以简单地将网站转移到实时服务器。

【讨论】:

    【解决方案3】:

    我认为关于 Magento 1.4 到 1.7.x 升级最全面的描述是这样的,由交钥匙网站提供:

    在继续这部分 Magento 升级之前,请务必查看 Magento 升级脚本将升级您的商店的版本。输入此命令进行检查:

    1
    ./mage list-upgrades
    

    如果你会看到这个结果:

    Updates for community:
    Mage_All_Latest: 1.4.2.1 => 1.7.0.2
    Lib_Js_Mage: 1.4.2.0 => 1.7.0.2
    Lib_Varien: 1.4.2.0 => 1.7.0.2
    

    这意味着您的 Magento 将升级到 1.7.0.2 版本。如果这不是您需要的,您可以将升级通道更改为“测试版”并将您的 Magento 升级到 RC(测试版)版本。

    1 – 输入此命令将升级通道更改为稳定(请记住,“稳定”通道会将您的 Magento 升级到最新的 1.7.x 稳定版本):

    1
    ./mage config-set preferred_state stable
    

    在此之后“./mage list-upgrades”命令会显示这个结果:

    社区更新:

      Mage_All_Latest: 1.4.2.1 => 1.7.0.2.
        Lib_Js_Mage: 1.4.2.0 => 1.7.0.2.
        Lib_Varien: 1.4.2.0 => 1.7.0.2.
        Lib_Phpseclib: 1.4.2.0 => 1.7.0.2.
        Mage_Core_Adminhtml: 1.4.2.0 => 1.7.0.2.
        Mage_Core_Modules: 1.4.2.0 => 1.7.0.2.
    

    2 – 选择频道后,您可以使用以下命令将 Magento 升级到 Magento 1.7.0.2):

    1
    ./mage upgrade-all --force
    

    如果“./mage upgrade-all –force”不起作用,你可以尝试执行这个命令:

    1
    ./mage install connect20.magentocommerce.com/community Mage_All_Latest --force
    

    您将在屏幕上看到升级的软件包:

    …
    
        Package upgraded: community/Mage_Locale_en_US 1.7.0.2
        Package upgraded: community/Lib_Mage 1.7.0.2
        Package upgraded: community/Lib_ZF 1.11.1.0
        Package upgraded: community/Lib_Js_Prototype 1.7.0.2.
        Package upgraded: community/Lib_ZF_Locale 1.11.1.0
    

    现在升级已完成,您可以在浏览器中访问您的 Magento 商店执行数据库升级,此过程需要几分钟,请耐心等待。如果一切都正确升级,您将在浏览器中看到升级后的商店。在数据库升级之前,建议增加 PHP 引擎的时间和内存限制。

    如果无法增加,可以尝试通过SSH进行数据库升级,例如:

    1
    
        php -f ./index.php
    

    数据库升级完成后,您可以在 Magento 管理面板的页脚查看您的商店的版本。

    【讨论】:

      【解决方案4】:

      检查您的 apache 日志。但是,听起来它在升级过程中的某个地方被抓住了。确保你的所有文件都是新版本,备份你的数据库,并确保你的数据库连接信息是正确的。

      您可能还需要仔细检查数据库的大小。如果您的数据库很大,magento 可能会超时。

      【讨论】:

      • 从mysql日志我发现这个错误:121031 11:25:49 [ERROR] 表magento17/sales_flat_order在InnoDB内部包含9个索引,与MySQL中定义的索引8个数不同跨度>
      【解决方案5】:

      当前 (1.4.0.1) 数据库有多大?最近当我不得不在本地服务器上升级 7GB 数据库时,整个周末都在本地服务器上 - 如此漫长的过程的原因是 1.6 版有新的索引器并且数据库结构被重建 - 安装脚本意味着在第一次加载更新代码时触发正在删除大量外键并创建具有很多约束的新键。

      【讨论】:

      • 数据库备份大小约为 210MB。正如我提到的,MySql 错误日志文件中有一个错误。我认为它停止了升级过程。 error: 121031 11:25:49 [ERROR] 表 magento17/sales_flat_order 在 InnoDB 内部包含 9 个索引,这与 MySQL 中定义的索引 8 个不同
      猜你喜欢
      • 2014-04-13
      • 2013-04-03
      • 2018-09-27
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多