好几年没有捣鼓过magento了,正好有个朋友要将1.9.2.1升级到magento2,好像是magento 1.9x官方停止维护了,有中毒的迹象。经过五六年的发展,magento2应该也比较成熟了,搞起搞起。
首先说一下我的方案吧,分为以下几个步骤:
1.环境准备。新建一台服务器,搭建系统环境:php7.4(最好最新的,7.4.2好像有问题)、mysql8.0、nginx1.8、elasticsearch7.6.2(magento2只验证了7.6.X)、composer(推荐1.X版本)、jdk11(用于elasticsearch7.6.2,最少jdk8.X);
2.安装原生magento2.4。将1.9.2.1的数据库备份一份,导入新建的服务器中(这里只是模拟迁移),同时安装一份原生的2.4.1;
3.数据迁移。通过使用 data-migration-tool 将1.9X的数据迁移到magento2.4.1;
4.验证数据,配置计划任务等信息;
下面分步骤详细讲一下
1.环境准备
此部分略过,请注意版本的问题,安装成功后可以验证下各个软件是否正常工作;
2.安装原生magento2.4
官方推荐使用composer或者git、源码包安装,但是国内网速的原因,我选择了源码包,centos指令如下:
wget https://github.com/magento/magento2/archive/2.4.1.zip
下载好源码包之后,解压,进入网站目录,执行以下安装脚本:
bin/magento setup:install \
--base-url=http://xxx.com \
--db-host=localhost \
--db-name=你的数据库名称\
--db-user=你的数据库用户名\
--db-password=你的数据库密码\
--admin-firstname=后台姓\
--admin-lastname=后台名\
--admin-email=后台邮箱 \
--admin-user=后台用户名\
--admin-password=后台密码\
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1
这里要注意一下,2.4之前是可以通过浏览器访问setup安装的,2.4以后好像只能通过指令安装了。还有就是如果提示你需要composer update,网站根目录执行一下composer update就好了。
安装成功后会输出一个后台的访问地址,admin_xxxx后面的是随机数,请大家记好,访问后台需要用到。当然你也可以在安装的时候指定后台地址,但是为了安全最好不要指定。有需要的请参考magento官方的安装文档:
安装成功之后,配置好nginx conf,就可以访问网站。如果出现前后端或者js、css404,一般是权限的问题,请执行以下linux指令:
find var -type f -exec chmod 0644 {} \;
find var -type d -exec chmod 0755 {} \;
chcon -t httpd_sys_content_t var -R
chcon -t httpd_sys_rw_content_t var -R
find generated -type f -exec chmod 0644 {} \;
find generated -type d -exec chmod 0755 {} \;
chcon -t httpd_sys_content_t generated -R
chcon -t httpd_sys_rw_content_t generated -R
find pub/static -type f -exec chmod 0644 {} \;
find pub/static -type d -exec chmod 0755 {} \;
chcon -t httpd_sys_content_t pub/static -R
chcon -t httpd_sys_rw_content_t pub/static -R
执行完之后在magento的根目录再清除缓存和重新索引一下:
清理缓存:
bin/magento cache:flush
重新索引
bin/magento indexer:reindex
如果还是显示404,可能是你的目录权限的问题,请检查你的linux用户是否有操作这些目录的权限。
新建一个magento1的数据库,将你的magento1的数据库备份导入进去,为后面的迁移做准备。
3.数据迁移
1.安装data-migration-tool
在网站根目录下执行以下指令:
composer config repositories.magento composer https://repo.magento.com
composer require magento/data-migration-tool:2.4.1
这里要注意下,你要下载和你要迁移的版本一样的工具,比如说你要迁移到2.4.0 那你就把 data-migration-tool:2.4.1 改为 2.4.0,其他版本同理;
如果要你输入相关信息,输入就好。
2.同步数据
安装成功之后,找到你要升级的1.X版本的文件,我这里是:网站目录/vendor/magento/data-migration-tool/etc/opensource-to-opensource/1.9.2.1/config.xml.dist 将config.xml.dist 复制一份,cp config.xml.dist config.xml,
然后打开config.xml,找到数据库配置内容,并替换为你自己的信息:
<source>
<database host="localhost" name="magento1" user="root" password="123456" />
</source>
<destination>
<database host="localhost" name="magento2" user="root" password="123456" />
</destination>
<crypt_key>xxxxxxxxxxxxxxxxxxxxx</crypt_key>
其中crypt_key是你的magento1.x的密文,在app/etc/local.xml里面可以找到,这个比较重要,要搞对才能使用之前的密码。
如果你要升级1.9.2.4 ,那你就找到1.9.2.1/config.xml 配置一下就好了。
这个文件夹还有个map.xml.dist,是用来排除掉一下不需要同步的数据的,我这里安装的时候报错了,排除了以下几个表:
如果合并没有报错,就不需要修改这个xml。
当你要使用这个map.xml的时候,要先去上面说的config.xml配置一下:
配置好之后,回到网站根目录,执行以下指令:
##同步配置
bin/magento -a migrate:settings 你的网站根目录绝对路径/vendor/magento/data-migration-tool/etc/opensource-to-opensource/1.9.2.1/config.xml
##同步数据
bin/magento -a migrate:data 你的网站根目录绝对路径/vendor/magento/data-migration-tool/etc/opensource-to-opensource/1.9.2.1/config.xml
其中参数 -a,他会忽略不能同步的信息,大家可以尝试下不加这个参数。
静待同步完成,再进行下一步操作。
这里要特别说明下,之前magento1.x的插件和主题,以及自己开发的插件都不打算再要了,所以这里不讨论同步代码和主题插件,只同步数据。
4.验证数据
同步成功之后,请刷新缓存和索引,参考安装的那里的刷新指令。
然后动动小手,去前台后端都点点吧,没毛病再开启计划任务,因为mgento很多东西都是计划任务在执行了,比如说你修改了产品:
开启计划任务的指令是:
bin/magento cron:install
然后再你的服务器执行: crontab -l
有以上输出就是成功了,注意下你服务器的当前用户,指定用户可以使用 crontab -l -uwww。
到这里,基本上就迁移成功了,后面的搜索啊、邮件啊,可以慢慢捣鼓下了。
再说一个遇到的问题吧,当迁移成功后,我发现前端没有任何产品展示,但是后台产品又是可用、有库存,总之是后台产品和分类完全正常,就是前台不展示。
后面发现是website_id的问题,同步的时候莫名其妙多了一个Admin的店铺,而且在后台也不展示,真是奇了怪
数据库store_website表显示有两个店铺:
后台展示只有一个店铺:
没找到问题出在哪里,后面就批量把产品的website_id设置为1,前端产品就展示出来了,奇葩。
大家有任何问题欢迎留言和交流。