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

9

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

Os URLs completos do WP_SITEURL, WP_HOME e todos os outros locais do wordpress precisam de atualização ao importar para outro host (teste, teste, produção)

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

Principais problemas:

  • O Wordpress armazena URLs completas em todo o banco de dados (não portáteis)
  • Muitos outros registros não relevantes mudam
    • valores de auto_increment (apenas removo esses valores, mas tenho problemas de ID)
    • timestamps (também podem ser removidos, potencialmente)
    • transitórios * registros ... não tem 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 é mesmo possível?

    
por Jacob Dorman 14.02.2014 / 06:54

2 respostas

4

Aqui estão duas soluções possíveis, ambas são na verdade 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, das alterações detectadas no banco de dados. Esses scripts são armazenados em um diretório local e, portanto, podem ser enviados para o seu VCS atual (git, por exemplo).

É usado através de uma interface web PHP.

DBVC

Fundamentalmente semelhante à ferramenta anterior, isso é baseado em uma interface de linha de comando. Está 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 com o anterior, então é algo para procurar.

Plugins do Wordpress

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

por Víctor López García 10.09.2014 / 21:46
2

Estou fazendo isso no MYSQL.

Ele coloca todos os esquemas e dados das tabelas em seus próprios arquivos para que eu possa ver facilmente o que mudou.

Diferentemente da maioria das outras soluções neste 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.

edit: Eu descobri que meu código antigo tinha um bug em que a ordem de importação era importante. tirar o sinalizador --compact corrige o bug.

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
    
por David Silva Smith 19.08.2016 / 23:58