Usamos algo semelhante ao bcwoord para manter nossos esquemas de banco de dados sincronizados em 5 instalações diferentes (produção, preparo e algumas instalações de desenvolvimento) e com backup no controle de versão, e funciona muito bem. Vou elaborar um pouco:
Para sincronizar a estrutura do banco de dados, temos um único script, update.php e vários arquivos numerados 1.sql, 2.sql, 3.sql etc. O script usa uma tabela extra para armazenar o número da versão atual do arquivo. base de dados. Os arquivos N.sql são criados manualmente, para passar da versão (N-1) para a versão N do banco de dados.
Eles podem ser usados para adicionar tabelas, adicionar colunas, migrar dados de um antigo para um novo formato de coluna e soltar a coluna, inserir linhas de dados "principais", como tipos de usuários, etc. Basicamente, ele pode fazer qualquer coisa e com os dados adequados. scripts de migração, você nunca perderá dados.
O script de atualização funciona assim:
- Conecte-se ao banco de dados.
- Faça um backup do banco de dados atual (porque as coisas vão dar errado) [mysqldump].
- Crie uma tabela de contabilidade (chamada _meta) se ela não existir.
- Leia a VERSÃO atual da tabela _meta. Assuma 0 se não for encontrado.
- Para todos os arquivos .sql numerados acima de VERSION, execute-os em ordem
- Se um dos arquivos gerou um erro: reverta para o backup
- Caso contrário, atualize a versão na tabela de contabilidade para o arquivo .sql mais alto executado.
Tudo entra no controle de origem, e toda instalação possui um script para atualizar para a versão mais recente com uma única execução de script (chamando update.php com a senha apropriada do banco de dados, etc.). Atualizamos os ambientes de teste e produção por meio de um script que chama automaticamente o script de atualização do banco de dados; portanto, uma atualização de código é fornecida com as atualizações necessárias.
Também podemos usar o mesmo script para recriar todo o banco de dados do zero; nós simplesmente descartamos e recriamos o banco de dados e, em seguida, executamos o script que repovoará completamente o banco de dados. Também podemos usar o script para preencher um banco de dados vazio para testes automatizados.
Demorou apenas algumas horas para configurar este sistema, é conceitualmente simples e todo mundo recebe o esquema de numeração de versões, e foi inestimável ter a capacidade de avançar e evoluir o design do banco de dados, sem ter que se comunicar ou executar manualmente as modificações. em todos os bancos de dados.
Cuidado ao colar consultas do phpMyAdmin! Essas consultas geradas geralmente incluem o nome do banco de dados, que você definitivamente não deseja, pois isso interromperá seus scripts! Algo como CREATE TABLE mydb
. newtable
(...) falhará se o banco de dados no sistema não for chamado mydb. Criamos um gancho SVN de pré-comentário que não permitirá que arquivos .sql contenham a mydb
string, o que é um sinal claro de que alguém copiou / colou do phpMyAdmin sem a verificação adequada.