完成升级先决条件

了解运行Adobe Commerce所需的内容很重要。 您必须首先查看计划升级到的版本的系统要求

查看系统要求后,必须在升级系统之前完成以下先决条件:

  • 更新所有软件
  • 验证是否安装了受支持的搜索引擎
  • 转换数据库表格式
  • 设置打开文件限制
  • 验证cron作业是否正在运行
  • 设置DATA_CONVERTER_BATCH_SIZE
  • 验证文件系统权限
  • 设置pub/目录根
  • 安装编辑器更新插件

更新所有软件

系统要求准确地描述了哪些版本的第三方软件已通过Adobe Commerce版本测试。

确保更新了环境中的所有系统要求和依赖项。 请参阅PHP 7.4、PHP 8.0、PHP 8.1所需的PHP设置

NOTE
对于云基础架构Pro项目上的Adobe Commerce,您必须创建支持票证,以在暂存环境和生产环境中安装或更新服务。 指示所需的服务更改,并在票证中包含更新的.magento.app.yamlservices.yaml文件以及PHP版本。 Cloud Infrastructure团队更新项目最多可能需要48小时。 请参阅支持的软件和服务

验证是否安装了受支持的搜索引擎

Adobe Commerce需要安装Elasticsearch或OpenSearch才能使用该软件。

如果您要从2.3.x升级到2.4,则必须检查您在2.3.x实例中是使用MySQL、Elasticsearch还是第三方扩展作为目录搜索引擎。 结果确定在升级到2.4之前​ 必须 ​做什么。

如果要升级2.3.x或2.4.x版本行中的修补程序版本,如果已安装Elasticsearch7.x,则可以选择迁移到OpenSearch

您可以使用命令行或管理员来确定目录搜索引擎:

  • 输入bin/magento config:show catalog/search/engine命令。 该命令返回值mysqlelasticsearch(表示已配置Elasticsearch2)、elasticsearch5elasticsearch6elasticsearch7或自定义值,表示您已安装第三方搜索引擎。 对于低于2.4.6的版本,为Elasticsearch7或OpenSearch引擎使用elasticsearch7值。 对于版本2.4.6及更高版本,请使用OpenSearch引擎的opensearch值。

  • 从管理员中,检查​ Stores > Settings > Configuration > Catalog > Catalog > Catalog Search > Search Engine ​字段的值。

以下部分介绍在升级到2.4.0之前必须执行的操作。

MySQL

从2.4开始,MySQL不再是一个受支持的目录搜索引擎。 在升级之前,必须安装和配置Elasticsearch或OpenSearch。 请使用以下资源来帮助您完成此过程:

一些第三方目录搜索引擎在Adobe Commerce搜索引擎上运行。 请与供应商联系以确定是否必须更新扩展。

MariaDB

与以前的MariaDB或MySQL版本相比,对MariaDB 10.4和10.6重新编制索引需要更多时间。 要加快重新索引速度,我们建议设置以下MariaDB配置参数:

如果您在升级到MariaDB 10.6后遇到与索引无关的性能下降,请考虑启用--query-cache-type设置。 例如,--query-cache-type=ON

在升级云基础架构项目上的Adobe Commerce之前,您可能还需要升级MariaDB (请参阅MariaDB升级最佳实践)。

例如:

  • Adobe Commerce 2.4.6适用于MariaDB 10.5.1或更高版本
  • Adobe Commerce 2.3.5与MariaDB版本10.3或更低版本

除了这些建议之外,您还应咨询数据库管理员配置以下参数:

NOTE
这些设置仅适用于内部部署。 云基础架构上的Adobe Commerce客户无权访问这些设置。

搜索引擎

在升级到2.4.0之前,必须安装和配置Elasticsearch7.6或更高版本或OpenSearch 1.2。Adobe不再支持Elasticsearch2.x、5.x和6.x。配置指南 ​中的搜索引擎配置描述了将Elasticsearch升级到支持的版本后必须执行的任务。

有关在部署到生产环境之前备份数据、检测潜在的迁移问题和测试升级的完整说明,请参阅升级Elasticsearch。 根据您当前的Elasticsearch版本,可能需要也可能不需要完全重新启动群集。

Elasticsearch需要Java开发工具包(JDK) 1.8或更高版本。 请参阅安装Java软件开发工具包(JDK)以检查安装的JDK版本。

OpenSearch

OpenSearch是Elasticsearch许可更改后Elasticsearch7.10.2的开源分支。 以下版本的Adobe Commerce引入了对OpenSearch的支持:

  • 2.4.6(OpenSearch具有单独的模块和设置)
  • 2.4.5
  • 2.4.4
  • 2.4.3-p2
  • 2.3.7 - p3

只有升级到上述(或更高版本)列出的Adobe Commerce版本时,才能从Elasticsearch迁移到OpenSearch

OpenSearch需要JDK 1.8或更高版本。 请参阅安装Java软件开发工具包(JDK)以检查安装的JDK版本。

搜索引擎配置描述了更改搜索引擎后必须执行的任务。

升级Elasticsearch

Adobe Commerce 2.4.6引入了对Elasticsearch8.x的支持。以下说明显示了Elasticsearch从7.x升级到8.x的示例:

  1. 将Elasticsearch7.x服务器升级到8.x ,并确保已启动并正在运行。 请参阅Elasticsearch文档

  2. 通过将以下配置添加到elasticsearch.yml文件并重新启动Elasticsearch8.x服务来启用id_field_data字段。

    code language-yaml
    indices:
      id_field_data:
        enabled: true
    
    note info
    INFO
    为了支持Elasticsearch8.x,Adobe Commerce 2.4.6在默认情况下不允许使用indices.id_field_data属性,并使用docvalue_fields属性中的_id字段。
  3. 在Adobe Commerce项目的根目录中,更新编辑器依赖项以删除Magento_Elasticsearch7模块并安装Magento_Elasticsearch8模块。

    code language-bash
    composer require magento/module-elasticsearch-8 --update-with-all-dependencies
    
  4. 更新项目组件。

    code language-bash
    bin/magento setup:upgrade
    
  5. 在Admin中配置Elasticsearch

  6. 重新索引目录索引。

    code language-bash
    bin/magento indexer:reindex catalogsearch_fulltext
    
  7. 从启用的缓存类型中删除所有项目。

    code language-bash
    bin/magento cache:clean
    

降级Elasticsearch

如果您无意中升级了服务器上的Elasticsearch版本,或确定由于任何其他原因需要降级,则还必须更新Adobe Commerce项目依赖项。 例如,从Elasticsearch8.x降级到7.x

  1. 将Elasticsearch8.x服务器降级为7.x ,并确保已启动并正在运行。 请参阅Elasticsearch文档

  2. 在Adobe Commerce项目的根目录中,更新编辑器依赖项以删除Magento_Elasticsearch8模块及其编辑器依赖项,并安装Magento_Elasticsearch7模块。

    code language-bash
    composer remove magento/module-elasticsearch-8
    
  3. 更新项目组件。

    code language-bash
    bin/magento setup:upgrade
    
  4. 在Admin中配置Elasticsearch

  5. 重新索引目录索引。

    code language-bash
    bin/magento indexer:reindex catalogsearch_fulltext
    
  6. 从启用的缓存类型中删除所有项目。

    code language-bash
    bin/magento cache:clean
    

第三方扩展

我们建议您联系搜索引擎供应商,以确定您的扩展是否与Adobe Commerce版本完全兼容。

转换数据库表格式

您必须将所有数据库表的格式从COMPACT转换为DYNAMIC。 还必须将存储引擎类型从MyISAM转换为InnoDB。 请参阅最佳实践

设置打开文件限制

设置打开文件限制(ulimit)有助于避免多次递归调用长查询字符串失败或使用bin/magento setup:rollback命令时出现问题。 此命令对于不同的UNIX shell是不同的。 有关ulimit命令的详细信息,请咨询您的个人风格。

Adobe建议将打开的文件ulimit设置为65536或更大的值,但如有必要,您可以使用更大的值。 您可以在命令行上设置限制,也可以将其设置为用户shell的永久设置。

要从命令行设置限制,请执行以下操作:

  1. 切换到文件系统所有者

  2. 将限制设置为65536

    code language-bash
    ulimit -n 65536
    

要在Bash shell中设置值,请执行以下操作:

  1. 切换到文件系统所有者

  2. 在文本编辑器中打开/home/<username>/.bashrc

  3. 添加以下行:

    code language-bash
    ulimit -n 65536
    
  4. 保存对.bashrc文件所做的更改并退出文本编辑器。

IMPORTANT
我们建议您避免为php.ini文件中的pcre.recursion_limit属性设置值,因为它可能会导致不完整的回滚,并且不会出现失败通知。

验证cron作业是否正在运行

UNIX任务计划程序cron对于日常Adobe Commerce操作至关重要。 它计划重新索引、新闻稿、电子邮件和站点地图等内容。 多个功能要求至少有一个cron作业作为文件系统所有者运行。

要验证您的cron作业是否设置正确,请通过输入以下命令作为文件系统所有者检查crontab:

NOTE
crontab是负责运行cron作业的配置文件。
crontab -l

应显示类似于以下内容的结果:

#~ MAGENTO START c5f9e5ed71cceaabc4d4fd9b3e827a2b
* * * * * /usr/bin/php /var/www/html/magento2/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/html/magento2/var/log/magento.cron.log
#~ MAGENTO END c5f9e5ed71cceaabc4d4fd9b3e827a2b

cron未运行的另一个症状是管理员中出现以下错误:

要查看错误,请单击窗口顶部的​ 系统消息,如下所示:

有关详细信息,请参阅配置和运行cron

设置DATA_CONVERTER_BATCH_SIZE

Adobe Commerce 2.4包含安全增强功能,这些功能要求将某些数据从序列化转换为JSON。 此转换在升级期间发生,并且可能需要很长时间,具体取决于数据库中的数据量。

以下表格受到的影响最大:

  • catalogrule
  • core_config_data
  • magento_reward_history
  • quote_payment
  • quote
  • sales_order_payment
  • sales_order
  • salesrule
  • url_rewrite

如果您有大量数据,可以通过设置环境变量DATA_CONVERTER_BATCH_SIZE的值来提高性能。 默认情况下,该值设置为50,000

要设置环境变量,请执行以下操作:

  1. 切换到文件系统所有者

  2. 设置变量:

    code language-bash
    export DATA_CONVERTER_BATCH_SIZE=100000
    
    note note
    NOTE
    DATA_CONVERTER_BATCH_SIZE需要内存;如果不先测试它,请避免将其设置为较大的值(约1 GB)。
  3. 升级完成后,您可以取消设置变量:

    code language-bash
    unset DATA_CONVERTER_BATCH_SIZE
    

验证文件系统权限

出于安全原因,Adobe Commerce要求对文件系统具有某些权限。 权限与​ 所有权 ​不同。 所有权决定了谁可以对文件系统执行操作;权限决定了用户可以执行哪些操作。

文件系统中的目录必须可由文件系统所有者的组写入。

要验证您的文件系统权限是否设置正确,请登录到应用程序服务器或使用托管提供商的文件管理器应用程序。

例如,如果应用程序安装在/var/www/html/magento2中,请输入以下命令:

ls -l /var/www/html/magento2

示例输出:

total 1028
drwxrwx---. 12 magento_user apache   4096 Jun  7 07:55 .
drwxr-xr-x.  3 root         root     4096 May 11 14:29 ..
drwxrwx---.  4 magento_user apache   4096 Jun  7 07:53 app
drwxrwx---.  2 magento_user apache   4096 Jun  7 07:53 bin
-rw-rw----.  1 magento_user apache 439792 Apr 27 21:23 CHANGELOG.md
-rw-rw----.  1 magento_user apache   3422 Apr 27 21:23 composer.json
-rw-rw----.  1 magento_user apache 425214 Apr 27 21:27 composer.lock
-rw-rw----.  1 magento_user apache   3425 Apr 27 21:23 CONTRIBUTING.md
-rw-rw----.  1 magento_user apache  10011 Apr 27 21:23 CONTRIBUTOR_LICENSE_AGREEMENT.html
-rw-rw----.  1 magento_user apache    631 Apr 27 21:23 COPYING.txt
drwxrwx---.  4 magento_user apache   4096 Jun  7 07:53 dev
-rw-rw----.  1 magento_user apache   2926 Apr 27 21:23 Gruntfile.js
-rw-rw----.  1 magento_user apache   7592 Apr 27 21:23 .htaccess
-rw-rw----.  1 magento_user apache   6419 Apr 27 21:23 .htaccess.sample
drwxrwx---.  4 magento_user apache   4096 Jun  7 07:53 lib
-rw-rw----.  1 magento_user apache  10376 Apr 27 21:23 LICENSE_AFL.txt
-rw-rw----.  1 magento_user apache  30634 Apr 27 21:23 LICENSE_EE.txt
-rw-rw----.  1 magento_user apache  10364 Apr 27 21:23 LICENSE.txt
-rw-rw----.  1 magento_user apache   4108 Apr 27 21:23 nginx.conf.sample
-rw-rw----.  1 magento_user apache   1427 Apr 27 21:23 package.json
-rw-rw----.  1 magento_user apache   1659 Apr 27 21:23 .php_cs
-rw-rw----.  1 magento_user apache    804 Apr 27 21:23 php.ini.sample
drwxrwx---.  2 magento_user apache   4096 Jun  7 07:53 phpserver
drwxrwx---.  6 magento_user apache   4096 Jun  7 07:53 pub
-rw-rw----.  1 magento_user apache   2207 Apr 27 21:23 README_EE.md
drwxrwx---.  7 magento_user apache   4096 Jun  7 07:53 setup
-rw-rw----.  1 magento_user apache   3731 Apr 27 21:23 .travis.yml
drwxrwx---.  7 magento_user apache   4096 Jun  7 07:53 update
drwxrws---. 11 magento_user apache   4096 Jun 13 16:05 var
drwxrws---. 29 magento_user apache   4096 Jun  7 07:53 vendor

有关示例输出的说明,请参阅以下内容:

  • 大多数文件为-rw-rw----,即660
  • drwxrwx--- = 770
  • -rw-rw-rw- = 666
  • 文件系统所有者是magento_user

要获取更多详细信息,可以输入以下命令:

ls -la /var/www/html/magento2/pub

由于Adobe Commerce会将静态文件资产部署到pub的子目录,因此最好也验证其权限和所有权。

有关详细信息,请参阅文件系统权限和所有权

设置pub/目录根

有关详细信息,请参阅修改docroot以提高安全性

安装编辑器更新插件

magento/composer-root-update-plugin Composer插件解析了在更新到新产品要求之前必须对根项目composer.json文件进行的更改。

该插件通过识别和帮助您解决相关性冲突,而不是要求您手动识别和修复这些冲突,从而部分自动化了手动升级。

要安装插件,请执行以下操作:

  1. 将包添加到您的composer.json文件。

    code language-bash
    composer require magento/composer-root-update-plugin ~2.0 --no-update
    
  2. 更新依赖关系:

    code language-bash
    composer update
    
recommendation-more-help
83a60e0e-8849-4685-a8cd-c129ecd795ea