你可能已经意识到了,Magento 2将有一个全新的体系结构和数据库设计。为了简化升级过程,Magento发布了官方的数据迁移工具,帮助开发人员将数据从Magento 1迁移到Magento 2。
官方资源:

数据迁移工具根据xml文件中定义的规则集将数据从M1数据库迁移到M2数据库。需要说明的是,此工具仅传输数据。商店的主题和自定义项无法自动更改或迁移到Magento2。

使用Composer将工具安装到空的Magento2中,这并不是扩展,而是需要Magento2框架才能工作的独立shell应用程序,它位于vendor/magento/data-migration-tool/bin/migrate

您可以通过编辑vendor/magento/data-migration-tool/etc/ce-to-ce/文件夹中的xml文件来进行配置,在支持的默认Magento安装上,最低要求是在config.xml中配置源(M1)和目标(M2)数据库连接:

<source>
  <database host="localhost" name="magento1_db" user="root"/>
</source>
<destination>
  <database host="localhost" name="magento2_db" user="root"/>
</destination>

config.xml是主要配置文件,它定义连接,执行哪些步骤,到其他特定xmls的路径。map.xml包含主要的全局映射定义,要忽略的表或列,重命名成什么,而其他xml文件是特定于步骤的。

迁移有3个主要命令/步骤:设置,数据和增量。这个及其子步骤可以在config.xml中看到。

cd vendor/magento/data-migration-tool/bin/
php migrate --help
 
Usage:
  migrate <mode> --config=path/to/config.xml [options]
  migrate --help
 
Possible modes:
  settings            Migrate system configuration
  data                Main migration of data
  delta               Migrate the data is added into Magento after the main migration
 
Available options:
  --reset             Reset the current position of migration to start from the beginning
  --config <value>    Path to main configuration file, i.e.: etc/m1_version/config.xml
  --verbose <level>   Verbosity levels: DEBUG, INFO, ERROR
  --help              Help information

 

迁移设置

首先,您将设置,网站和商店迁移到M2。大多数Magento数据都与网站和商店有关,因此需要首先进行。

 

迁移数据

数据迁移将把类别,产品,客户,订单,愿望清单,评级,以及您能想到的所有内容转移到M2中。我认为我们可能会关掉一些东西,比如日志或引文。

 

迁移Delta

现在到了有趣的地方。成功进行数据迁移后,您总是可以通过delta迁移将新的M1条目附加到M2数据库,它将在上次停止的位置继续。Delta不迁移新的或更改的产品或类别(在编写本文时),只迁移客户、订单和类似的客户相关数据。

在进行数据迁移时,在M1数据库中创建一组m2_ *表,其中包含一组启用跟踪更改的触发器。

在使用M2时,Delta可以将迁移时间缩短到最小。

 

迁移媒体

在迁移产品和类别后,可以简单地将媒体文件复制/粘贴到M2中的适当位置,这很简单。

 

自定义迁移

由于在现实世界(XD)中没有默认的Magento,开发人员总是需要配置或自定义此工具。该工具本身很灵活,因为大多数映射是通过xml文件定义的,并通过php类过滤,Magento团队在这方面确实做得很好。

假设我们在M1中有自定义varchar sales_flat_order.custom_column。如果我们运行数据迁移,我们最终会得到一个错误:

[ERROR]: Source fields not mapped. Document: sales_flat_order. Fields: custom_column

要忽略它,我们需要在map.xml文件中添加以下内容。

<source>
  <field_rules>
    <ignore>
      <field>sales_flat_order.custom_column</field>
    </ignore>
..

我唯一的意思是,默认情况下可能会忽略未知的列如果M1中的列没有在xml中定义,则该工具应该忽略它,这将节省大量时间。

假设我们要将值移动到重命名的custom_column并修改过程中的值:

<source>
  <field_rules>
  ..
    <transform>
      <field>sales_flat_order.custom_column</field>
      <handler class="\Migration\Handler\AddPrefix">
        <param name="prefix" value="magease_"/>
      </handler>
    </transform>
    <move>
      <field>sales_flat_order.custom_column</field>
      <to>sales_order.new_custom_column</to>
    </move>
  ..

示例显示可以使用Handler类或创建自定义类,以便在迁移期间动态更改值。

如果映射不够,则可以创建全新的自定义步骤。每个步骤都由完整性,数据和卷类组成。在迁移之前触发完整性以检查映射是否一切正常,数据传输数据,卷检查迁移后是否一切正常。可以添加Delta类以支持增量迁移。