Você instalou o Data Migration Tool, rodou bin/magento migrate:settings e levou um Invalid config filename na cara. Ou passou dessa etapa e travou num "crypt_key" option is not defined the configuration, com erro de português e tudo.
Os dois erros são o mesmo problema: o arquivo de configuração que o tool espera não existe até você criar. Ele distribui um modelo com extensão .dist e assume que você vai copiar e preencher.
Achar o .dist da sua versão
Os modelos ficam organizados por caminho de migração e por versão de origem. Dentro de vendor/magento/data-migration-tool/etc/ existem três pastas: opensource-to-opensource, opensource-to-commerce e commerce-to-commerce. Dentro de cada uma, uma pasta por versão de Magento 1, de 1.6.0.0 até 1.9.4.5.
Você precisa da pasta que bate com a versão exata do seu M1. Não é "a mais próxima", é a exata — o mapeamento de tabelas muda entre elas.
ls vendor/magento/data-migration-tool/etc/opensource-to-opensource/Achou a sua, copie o modelo:
cd vendor/magento/data-migration-tool/etc/opensource-to-opensource/1.9.4.5/
cp config.xml.dist config.xmlUm conselho que economiza dor de cabeça: não deixe esse arquivo dentro do vendor/. Um composer update apaga tudo, junto com as suas credenciais preenchidas. O argumento de configuração aceita qualquer caminho, então mantenha o config.xml numa pasta do projeto — var/migration/, por exemplo — versionada ou pelo menos com backup.
Vale lembrar a regra que o próprio README do tool repete: a versão do magento/data-migration-tool tem que ser idêntica à do Magento 2 instalado. Tool 2.4.8 com Magento 2.4.8, e ponto.
Os três campos que precisam estar preenchidos
Abra o config.xml copiado. Ele é grande, mas só três pedaços exigem a sua atenção. Os dois primeiros ficam no fim do arquivo:
<source>
<database host="localhost" name="magento1" user="root" password="senha" />
</source>
<destination>
<database host="localhost" name="magento2" user="root" password="senha" />
</destination>O modelo vem sem o atributo password. Você adiciona. E o source é o banco do Magento 1, com acesso de leitura pelo menos; destination é o banco do Magento 2 recém-instalado e ainda vazio.
O terceiro campo está dentro do bloco <options> e vem vazio:
<crypt_key />O valor sai do Magento 1, do arquivo app/etc/local.xml, dentro da tag <key>:
grep -A3 '<crypt>' app/etc/local.xmlCopie o conteúdo — normalmente ele está dentro de um CDATA — e cole entre as tags: <crypt_key>seuvalor</crypt_key>.
Por que esse campo importa tanto? Porque o Magento 1 guarda algumas configurações criptografadas com essa chave, e o tool precisa decifrar com ela para recriptografar com a chave do Magento 2. Olhando o settings.xml.dist, quem passa pelo handler Migration\Handler\Encrypt são justamente as credenciais de pagamento: paypal/wpp/api_password, paypal/wpp/api_signature, payment/payflow_advanced/pwd e companhia. Sem a chave, o tool para no migrate:settings com aquela mensagem torta que você viu no começo.
A ordem dos três comandos
Os comandos são migrate:settings, migrate:data e migrate:delta, sempre nessa ordem, e o caminho do config.xml é argumento obrigatório em todos:
php bin/magento migrate:settings var/migration/config.xml
php bin/magento migrate:data var/migration/config.xml
php bin/magento migrate:delta var/migration/config.xmlDuas opções aparecem nos três comandos e valem conhecer:
-rou--reset: volta a posição da migração para o começo. É o que você usa quando errou o config e quer rodar tudo de novo do zero, depois de restaurar o banco de destino.-aou--auto: tenta resolver sozinho os problemas de integridade que aparecerem no caminho. Conveniente, e por isso mesmo perigoso: ele decide por você o que fazer com dado que não bate. Eu rodo sem o-ana primeira passada só para ler a lista de problemas, e só depois decido.
O migrate:delta é o único que não termina: ele fica rodando e copiando o que mudou no Magento 1 desde o migrate:data. É o que permite manter a loja antiga vendendo enquanto a nova é testada. Você o interrompe quando for virar o DNS.
Se o comando explodir com XML file is invalid, o problema é sintaxe: alguma tag ficou aberta ou você colou a chave com um caractere que precisa de escape. Valide o arquivo antes de culpar o tool:
xmllint --noout var/migration/config.xmlE antes de rodar qualquer coisa: pare o cron do Magento 2 e tire um dump do banco de destino recém-instalado. Você vai querer voltar a esse ponto mais de uma vez. O resto do roteiro de migração está no guia de migração do Magento 1 para o 2.
Perguntas rápidas
Perdi o local.xml do Magento 1. Consigo migrar sem a crypt_key?
As etapas que não passam pelo handler de criptografia rodam, mas as credenciais criptografadas do M1 vão falhar ou chegar embaralhadas no destino. Na prática é mais rápido reconfigurar os meios de pagamento na mão no Magento 2 do que tentar recuperar a chave.
Posso apontar source e destination para bancos em servidores diferentes?
Pode, desde que o servidor onde o tool roda alcance os dois. O que exige mesma instância de MySQL é a opção direct_document_copy, que acelera bastante a cópia mas pede também permissão de SELECT do usuário do destino no banco de origem.
O que fazer se o meu Magento 1 usa prefixo de tabela?
Preencha as tags source_prefix e dest_prefix dentro do bloco de options do config.xml. Elas existem exatamente para isso e vêm vazias no modelo, o que faz o tool procurar tabelas sem prefixo e falhar na etapa de integridade.
Pra conferir na fonte
- Configure the Data Migration Tool — Adobe Experience League
- config.xml.dist (data-migration-tool 2.4.8.1) — GitHub
- AbstractMigrateCommand.php (data-migration-tool 2.4.8.1) — GitHub
- Command-line reference for Commerce on-premises — Adobe Experience League