Converter um banco de dados de produção em dados de teste

15

Quanto mais próximo o teste estiver da produção, melhor ele pode imitar o comportamento da produção. Gostaria de copiar os backups do banco de dados da produção para nossos ambientes de teste, mas o que preciso alterar para que o teste funcione e para não interferir na produção ou enviar e-mails acidentalmente a clientes reais (além de definir web/%secure/base_urlcom o URL de teste)?

Outra maneira de pensar sobre essa questão seria considerar como gerar algo como Magento Sample Data a partir de meus próprios dados de produção.

kojiro
fonte

Respostas:

8

1) Despejo de banco de dados

Ao fazer a exportação, você pode exportar apenas a estrutura para as seguintes tabelas:

core_cache
core_cache_option
core_cache_tag
log_customer
log_quote
log_summary
log_summary_type
log_url
log_url_info
log_visitor
log_visitor_info
log_visitor_online
enterprise_logging_event
enterprise_logging_event_changes
index_event
index_process_event
report_event
report_viewed_product_index
dataflow_batch_export
dataflow_batch_import

Também core_url_rewritepode ser importado apenas com a estrutura e executar uma reindexação de URLs do catálogo após a importação, a menos que você precise de todos esses registros (para vários testes).

Você também pode limpar os carrinhos abandonados (dica:) sales_flat_quote, também pode remover pedidos se não precisar deles e apenas manter um número limitado

2) Definições de configuração

  • web / (não seguro | seguro) / base_url
  • endereços de email de contato
  • desativar email ( system/smtp/disable) para não enviar emails por engano

3) Anonimizar informações do cliente

  • você pode usar o módulo Anonygento para Magento
  • escreva seu próprio script para ofuscar informações do cliente / pedidos de vendas / etc

4) Configurações do módulo

  • você pode ativar o modo sandbox para módulos de pagamento / envio e fazer as configurações apropriadas
  • verifique os módulos usados ​​para várias integrações (desative ou defina-os no modo sandbox)
FlorinelChis
fonte
Para dev, ignorar o conteúdo de algumas tabelas é bom. Para controle de qualidade / preparação, convém que todas essas tabelas sejam preenchidas para refletir a produção o mais próximo possível.
beeplogic
@FlorinelChris: Eu pensei que a pergunta era sobre a simplificação da migração de banco de dados e não torná-la tão complexa :) Bu de qualquer forma, boa resposta!
user487772
@ A parte mais difícil é colocar tudo isso em um script ... executá-lo depois é a solução simples.
FlorinelChis
2

Escrevemos um script para lidar com despejos de banco de dados para ramificação. Leia este artigo .

O princípio básico é que ele lê local.xmlpara buscar as credenciais do banco de dados e, em seguida, despeja os dados nessa base. Ele divide o despejo em duas partes, somente a estrutura e depois os dados. Mas a chave é que ele acelera o processo de despejo convencional ignorando dados não essenciais e evita criticamente qualquer bloqueio de tabela durante o despejo que, de outra forma, bloquearia / travaria seu site ativo.

Quando você tiver o dump do MySQL, poderá alterar a URL com muita facilidade usando sed

sed -i 's/www.mydomain.com/staging.mydomain.com/g' ./var/db.sql

Em seguida, execute uma importação do mysql no seu novo banco de dados.

Portanto, sem o script, uma versão muito básica seria assim.

mysqldump -hHostname -uUsername LiveDbname -p > db.sql
sed -i 's/www.mydomain.com/staging.mydomain.com/g' db.sql
mysql -hHostname -uUsername DevDbname -p < db.sql

Não há nenhum motivo para excluir o arquivo local.xml ou executar novamente o instalador se você alterar os URLs no banco de dados dessa maneira.

Todo o processo de ramificação está bem coberto em nosso Guia Magento GIT . Esse é um bom processo para criar ramificações de desenvolvimento, mas reduz o DB ativo por uma margem significativa. Portanto, os testes não serão completamente iguais aos do site ativo.

Portanto, executar um dump de banco de dados baunilha, substituir sed, a importação de banco de dados é suficiente para um site de preparação. E espelhará / corresponderá ao site ao vivo o mais próximo possível.

Em termos de impedir a comunicação com os clientes - nunca achamos isso necessário, pois sempre criamos contas deliberadamente para testes, nunca usando pedidos reais de clientes para testes.

Ben Lessani - Sonassi
fonte
1

Uma opção para o problema do email é configurar o site de desenvolvimento para redirecionar TODOS os emails para você. Adiciona um pouco de tranqüilidade.

Como você faz isso depende do seu ambiente - para nós, adicionar isso ao vhost faz o trabalho:

php_admin_value sendmail_path "/usr/sbin/sendmail -i -- [email protected],[email protected]"
xifóide
fonte
0

Nada. Alterar URLs seguros e não seguros é suficiente.

Você também pode omitir os log_*dados das tabelas apenas para tornar seu despejo mais leve.

user487772
fonte
11
Mas suponha que eu diga ao meu sistema de teste que enviei um pedido - ele não enviaria um email ao cliente real sobre isso?
Kojiro
Os únicos outros itens que precisam ser alterados são as informações de registro do módulo de terceiros, se você estiver executando chaves que são por domínio, em vez de serem apenas chaves de ativação. Também incluo endereços de e-mail para que o pedido transacional do teste vá para uma conta de teste em vez do balcão de pedidos. Quando você inicia, baseUrls seguros e não seguros são tudo o que é necessário. Se você planeja fazer isso com frequência, empacote tudo em um arquivo sql e importe-o após a importação do magento db.
Fiasco Labs
@kojiro - Não se você configurar algumas contas de teste. Converse com o administrador de e-mail da sua empresa, configure-o com alguns apelidos de e-mail.
Fiasco Labs
@FiascoLabs Estou confuso. Nesse cenário, acabei de importar um banco de dados Magento de produção com clientes reais. Se eu processar um pedido real com um cliente real, que benefícios os aliases de email farão?
Kojiro
@kojiro, você está correto. Depois de importar um conjunto de dados da produção, você precisa limpar / atualizar informações confidenciais / do cliente. Esta não é uma boa resposta, pois não trata a situação corretamente.
beeplogic
0

Tente isso, ele embaralha os e-mails dos usuários para ajudar com seu problema no envio acidental de clientes ao vivo do ambiente de teste

UPDATE customer_entity SET email = REPLACE(email, '@', '-test@abcxyz123-')
SPRBRN
fonte