Solução para controle e implantação de versão de banco de dados?

11

Atualmente eu uso um script de despejo e comprometo o banco de dados no repositório git. --skip-extended-insert --skip-comments --skip-dump-datesignifica que um diff pode me dar uma idéia justa do que mudou, mas tudo cai se eu tentar mesclar.

O WP_SITEURL, WP_HOME e todos os outros lugares que o wordpress armazena URLs completos precisam ser atualizados ao importar para outro host (teste, preparo, produção)

Alguém está usando um método melhor?

Questões principais:

  • O Wordpress armazena URLs completas em todo o banco de dados (não portável)
  • Muitos outros registros não relevantes são alterados
    • valores de auto_increment (eu apenas os retiro, mas tive problemas de identificação)
    • carimbos de data / hora (também podem ser removidos, potencialmente)
    • registros transitórios * ... não faço ideia do que fazer com eles

Um processo que criou migrações com registro de data e hora, com apenas as coisas adicionadas ou removidas, seria ideal ... mas não tenho certeza se é possível?

Jacob Dorman
fonte
Deseja versão todas as alterações de dados ou apenas alterações na estrutura ? e essa é sua verdadeira tarefa de negócios?
Lazy Badger
Ao fazer alterações nos CMSs como o wordpress, geralmente há alterações de conteúdo e configuração (dados do banco de dados), além de alterações na lógica (código). Eu gostaria de poder versão ambos. Mudanças na estrutura seriam um bom começo ... TAREFA DE NEGÓCIOS: o cliente pede um novo widget. Instale o plug-in no servidor de temporariedade, comprometa-se a reposicionar -> Configure o plug-in e inclua conteúdo de amostra -> uma vez aprovado, puxe as alterações de código para produção e faça manualmente as mesmas alterações de dados no administrador de produção.
Jacob Dorman
1
@JacobDorman Estou tentando resolver exatamente o mesmo problema. Você já trabalhou em alguma coisa? Após algumas pesquisas, estou começando a pensar em algum plugin personalizado que cria um script de atualização específico (provavelmente exportar apenas alterações de configuração, como plug-ins instalados e opções de configuração - e não necessariamente postagens, categorias e conteúdo em geral) . Gostaria de saber se você tem outras idéias.
Víctor López García

Respostas:

4

Aqui estão duas soluções possíveis, ambas são ferramentas genéricas de controle de versão do MySQL, mas podem ser adaptadas ao seu fluxo de trabalho:

dbv.php

Essa ferramenta cria "migrações", que são basicamente scripts SQL, a partir das alterações detectadas no banco de dados. Esses scripts são armazenados em um diretório local e, portanto, podem ser confirmados no seu VCS atual (git, por exemplo).

É usado através de uma interface web PHP.

DBVC

Fundamentalmente semelhante à ferramenta anterior, isso se baseia em uma interface de linha de comando. É configurado através de um arquivo json. A principal diferença é que ele não gera automaticamente os arquivos de migração.

Há um problema pendente para integrar isso ao similar anterior, então é algo a procurar.

Plugins do Wordpress

Alguns plugins que podem ajudar na criação de um fluxo de trabalho repetível:

Víctor López García
fonte
O dbvc se parece com o tipo de ferramenta que eu estava procurando. obrigado!
Jacob Dorman
1
Estou feliz que ajudou. Acabei de encontrar outra ferramenta interessante, que não foi atualizada há algum tempo, mas pode valer a pena fazer um saque em: github.com/idler/MMP
Víctor López García
@JacobDorman Com o DBVC, você consegue mesclar com êxito alterações de banco de dados de diferentes ambientes? Eu construí uma estratégia do meu próprio , mas não DBVC produzir os arquivos de atualização ou você tem que usar algo como mysqldiff entre SQL lixeiras? Não consigo imaginar essa ferramenta útil, a menos que ajude a produzir diferenças SQL realmente comparáveis, especialmente parâmetros de instrução INSERT em linhas separadas ... embora suponha que um arquivo possa ser editado para lidar com isso ...
Spencer Williams
@SpencerWilliams Eu não acabei usando DBVC (e não usei o mysqldiff), mas ainda adiciono db db ao controle de versão ... Na verdade, eu não os vejo mescláveis ​​na maioria dos casos, mas a difusão usando além da comparação pode ajudar a destacar mudanças e questões.
Jacob Dorman
@ victor eu verifiquei MMP. Ele altera o esquema, mas não diferencia / insere dados.
David Silva Smith
2

Estou fazendo isso no MYSQL.

Ele coloca todo o esquema e dados da tabela em seu próprio arquivo para que eu possa ver facilmente o que mudou.

Diferente da maioria das outras soluções nesse segmento, essa solução obtém os dados, o que é importante para um CMS.

Esta solução não usa nenhuma ferramenta, apenas um script de linha de comando.

editar: eu descobri que meu código mais antigo tinha um erro em que a ordem de importação era importante. tirar a --compactbandeira corrige o erro.

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

Código mais antigo

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

e aqui está como importar

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
David Silva Smith
fonte