你可能已经意识到了,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类以支持增量迁移。