Atualmente, estou desenvolvendo um aplicativo usando um banco de dados MySQL.
A estrutura do banco de dados ainda está em fluxo e muda enquanto o desenvolvimento avança (eu altero minha cópia local, deixando a cópia apenas no servidor de teste).
Existe uma maneira de comparar as duas instâncias do banco de dados para ver se houve alguma alteração?
Embora atualmente simplesmente descartar o banco de dados do servidor de teste anterior seja bom, conforme o teste começa a inserir dados de teste, pode ser um pouco complicado.
O mesmo, embora mais, aconteça novamente mais tarde na produção ...
Existe uma maneira fácil de fazer alterações incrementais no banco de dados de produção, de preferência criando automaticamente um script para modificá-lo?
Ferramentas mencionadas nas respostas:
- Esquema MySQL da Red-Gate e comparação de dados (comercial)
- Maatkit (agora Percona)
- liquibase
- Sapo
- Comparação de banco de dados Nob Hill (comercial)
- MySQL Diff
- SQL EDT (Comercial)
Respostas:
Se você estiver trabalhando com bancos de dados pequenos, eu encontrei executando o mysqldump nos dois bancos de dados com as opções
--skip-comments
e--skip-extended-insert
para gerar scripts SQL, então executar diff nos scripts SQL funciona muito bem.Ignorando comentários, você evita diferenças sem sentido, como o tempo em que você executou o comando mysqldump. Usando o
--skip-extended-insert
comando, você garante que cada linha seja inserida com sua própria instrução de inserção. Isso elimina a situação em que um único registro novo ou modificado pode causar uma reação em cadeia em todas as instruções de inserção futuras. A execução dessas opções produz despejos maiores sem comentários, portanto isso provavelmente não é algo que você deseja fazer no uso da produção, mas para o desenvolvimento deve ser bom. Eu coloquei exemplos dos comandos que eu uso abaixo:fonte
mysqldump --opt --compact --skip-extended-insert -u user -p db table > file.sql
-d
,--no-data
Pode ser de interesse para aqueles que necessitam de uso em produção, mas só se preocupam com o esquemavimdiff
O Toad for MySQL possui recursos de comparação de dados e esquema, e acredito que até criará um script de sincronização. O melhor de tudo é que é freeware.
fonte
--run-all-tests --difftype sql --disable-binary-logging
options pode fazer quase o mesmo trabalho (exceto que a saída é misturada ao comentário, e caracteres especiais na string não são escapados).Eu uso um software chamado Navicat para:
Custa dinheiro, é apenas para Windows e Mac e possui uma interface de usuário esquisita, mas eu gosto.
fonte
Existe uma ferramenta de sincronização de esquema no SQLyog (comercial) que gera o SQL para sincronizar dois bancos de dados.
fonte
Na lista de comparação de recursos ... MySQL Workbench oferece Schema Diff e Schema Synchronization em sua edição da comunidade.
fonte
Certamente, existem muitas maneiras, mas no meu caso eu prefiro o comando dump e diff. Então, aqui está um script baseado no comentário de Jared:
Comentários são bem-vindos :)
fonte
dbSolo, é pago, mas esse recurso pode ser o que você está procurando http://www.dbsolo.com/help/compare.html
Funciona com Oracle, Microsoft SQL Server, Sybase, DB2, Sólido, PostgreSQL, H2 e MySQL
fonte
Se você só precisa comparar esquemas (não dados) e ter acesso ao Perl, o mysqldiff pode funcionar. Eu o usei porque permite comparar bancos de dados locais com bancos de dados remotos (via SSH), para que você não precise se preocupar em despejar nenhum dado.
http://adamspiers.org/computing/mysqldiff/
Ele tentará gerar consultas SQL para sincronizar dois bancos de dados, mas não confio nela (ou em qualquer ferramenta, na verdade). Até onde eu sei, não há uma maneira 100% confiável de fazer engenharia reversa das alterações necessárias para converter um esquema de banco de dados em outro, especialmente quando várias alterações foram feitas.
Por exemplo, se você alterar apenas o tipo de uma coluna, uma ferramenta automatizada poderá adivinhar facilmente como recriar isso. Mas se você também mover a coluna, renomeá-la e adicionar ou remover outras colunas, o melhor que qualquer pacote de software pode fazer é adivinhar o que provavelmente aconteceu. E você pode acabar perdendo dados.
Sugiro acompanhar todas as alterações de esquema feitas no servidor de desenvolvimento e, em seguida, executar essas instruções manualmente no servidor ativo (ou transformá-las em um script de atualização ou migração). É mais tedioso, mas mantém seus dados seguros. E quando você começar a permitir que os usuários finais acessem seu site, estará realmente fazendo constantes alterações pesadas no banco de dados?
fonte
--hostN
e--userN
ou ele falhará silenciosamente.Dê uma olhada em http://www.liquibase.org/
fonte
verifique: http://schemasync.org/ a ferramenta schemasync funciona para mim, é uma ferramenta de linha de comando que funciona facilmente na linha de comando do linux
fonte
Há outra ferramenta mysql-diff de linha de comando de código aberto:
http://bitbucket.org/stepancheg/mysql-diff/
fonte
Existe uma ferramenta útil escrita usando o perl chamado Maatkit . Possui várias ferramentas de comparação e sincronização de bancos de dados, entre outras coisas.
fonte
SQL Compare by RedGate http://www.red-gate.com/products/SQL_Compare/index.htm
DBDeploy para ajudar no gerenciamento de alterações do banco de dados de forma automatizada http://dbdeploy.com/
fonte
Para mim, eu começaria com o despejo dos dois bancos de dados e a diferenciação dos despejos, mas se você quiser scripts de mesclagem gerados automaticamente, precisará obter uma ferramenta real.
Uma simples pesquisa no Google exibiu as seguintes ferramentas:
fonte
Dê uma olhada no dbForge Data Compare for MySQL . É um shareware com 30 dias de teste gratuito. É uma ferramenta rápida da GUI MySQL para comparação e sincronização de dados, gerenciamento de diferenças de dados e sincronização personalizável.
fonte
Depois de horas pesquisando na web por uma ferramenta simples, percebi que não procurei no Ubuntu Software Center. Aqui está uma solução gratuita que encontrei: http://torasql.com/ Eles afirmam ter uma versão para Windows também, mas eu só a estou usando no Ubuntu.
Edit: 2015-Feb-05 Se você precisar da ferramenta Windows, o TOAD é perfeito e gratuito: http://software.dell.com/products/toad-for-mysql/
fonte
A biblioteca de componentes apache zeta é uma biblioteca de uso geral de componentes fracamente acoplados para o desenvolvimento de aplicativos baseados no PHP 5.
O eZ Components - DatabaseSchema permite:
Você pode verificar o tutorial aqui: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html
fonte
Ferramenta de comparação e sincronização muito fácil de usar:
Database Comparer http://www.clevercomponents.com/products/dbcomparer/index.asp
Vantagens:
Desvantagens:
fonte
Acho que o Navicat para MySQL será útil para este caso. Ele suporta sincronização de dados e estrutura para MySQL.
fonte
Para a primeira parte da pergunta, eu apenas faço um despejo de ambos e os difiro. Não tenho certeza sobre o mysql, mas o postgres pg_dump possui um comando para apenas despejar o esquema sem o conteúdo da tabela, para que você possa ver se mudou algum esquema.
fonte
Estou trabalhando com a equipe de marketing da Nob Hill. Queria dizer que ficarei feliz em ouvir suas perguntas, sugestões ou qualquer outra coisa. Não hesite em entrar em contato.
Originalmente, decidimos criar nossa ferramenta do zero porque, enquanto existem outros produtos no mercado, nenhum deles faz o trabalho corretamente. É muito fácil mostrar as diferenças entre os bancos de dados. Outra coisa é criar um banco de dados como o outro. A migração suave, tanto de esquema quanto de dados, sempre foi um desafio. Bem, nós conseguimos isso aqui.
Estamos tão confiantes de que isso poderia fornecer uma migração tranqüila, do que se não acontecer - se os scripts de migração gerados não forem legíveis o suficiente ou não funcionarem para você e não pudermos corrigi-lo em cinco dias úteis - você receberá sua própria cópia gratuita!
http://www.nobhillsoft.com/NHDBCompare.aspx
fonte