Pergunta

Atualmente estou desenvolvendo uma aplicação utilizando um banco de dados MySQL.

O banco de dados-estrutura ainda está em fluxo e alterações enquanto avanços de desenvolvimento (I mudar minha cópia local, deixando o da sozinho test-server).

Existe uma maneira de comparar as duas instâncias de banco de dados para ver se houve alguma alteração?

Enquanto atualmente simplesmente descartar o banco de dados do servidor de teste anterior é bom, como o teste começar a introduzir dados de teste que poderia ficar um pouco complicado.
O mesmo embora mais por isso vai voltar a acontecer mais tarde na produção ...

Existe uma maneira fácil de fazer de forma incremental alterações para o banco de dados de produção, de preferência criando automaticamente um script para modificá-lo?


Ferramentas mencionado nas respostas:

Foi útil?

Solução

Se você estiver trabalhando com bancos de dados pequenos eu encontrei correndo mysqldump em ambas as bases de dados com as opções --skip-comments e --skip-extended-insert para gerar scripts SQL, em seguida, executando diff sobre os scripts SQL funciona muito bem.

Ao pular comentários que você evitar diferenças insignificantes, como o tempo que você executou o comando mysqldump. Usando o comando --skip-extended-insert você garantir que cada linha é inserida com a 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 toda a futura inserção declarações. Correndo com estas opções produz depósitos maiores, com comentários de modo que este provavelmente não é algo que você quer fazer em uso em produção, mas para o desenvolvimento deve ser fino. Eu coloquei exemplos dos comandos que eu uso abaixo:

mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql

Outras dicas

Toad for MySQL tem dados e funcionalidades de esquema comparar, e eu acredito que ele vai até mesmo criar um script de sincronização. O melhor de tudo, é gratuito.

Eu uso um software chamado Navicat para:

  • Sincronização ao vivo bancos de dados para meus bancos de dados de teste.
  • Mostrar diferenças entre as duas bases de dados.

Não custa dinheiro, é janelas e mac apenas, e ele tem uma UI whacky, mas eu gosto dele.

Há uma ferramenta de esquema de sincronização no SQLyog (comercial) que gera SQL para sincronizar dois bancos de dados.

enter descrição da imagem aqui

A partir da lista de comparação de recurso ... MySQL Workbench ofertas Schema Diff e sincronização de esquema, em sua edição da comunidade.

Há muitas maneiras certamente, mas no meu caso eu prefiro o despejo e diff de comando. Então aqui está um script com base no comentário de Jared:

#!/bin/sh

echo "Usage: dbdiff [user1:pass1@dbname1] [user2:pass2@dbname2] [ignore_table1:ignore_table2...]"

dump () {
  up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
  mysqldump --opt --compact --skip-extended-insert -u $user -p$pass $dbname $table > $2
}

rm -f /tmp/db.diff

# Compare
up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
for table in `mysql -u $user -p$pass $dbname -N -e "show tables" --batch`; do
  if [ "`echo $3 | grep $table`" = "" ]; then
    echo "Comparing '$table'..."
    dump $1 /tmp/file1.sql
    dump $2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  else
    echo "Ignored '$table'..."
  fi
done
less /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

O feedback é bem-vindo:)

dbSolo, ele é pago, mas esse recurso pode ser o que você está procurando http://www.dbsolo.com/help/compare.html

Ele funciona com Oracle, Microsoft SQL Server, Sybase, DB2, Sólido, PostgreSQL, H2 e MySQL text alt

Se você só precisa comparar esquemas (não de dados), e ter acesso a Perl, trabalho mysqldiff poder. Eu usei-o porque ele permite comparar bases de dados locais para bancos de dados remotos (via SSH), para que você não precisa se preocupar despejar todos os dados.

http://adamspiers.org/computing/mysqldiff/

Ele tentará gerar consultas SQL para sincronizar dois bancos de dados, mas eu não confiar nele (ou qualquer ferramenta, na verdade). Tanto quanto eu sei, não há nenhuma maneira 100% confiável para engenharia reversa as mudanças necessárias para converter um esquema de banco de dados para outro, especialmente quando várias alterações foram feitas.

Por exemplo, se você alterar apenas um tipo de coluna, uma ferramenta automatizada pode facilmente imaginar como recriar isso. Mas se você também mover a coluna, renomeá-lo 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.

Eu sugiro manter o controle de qualquer esquema as alterações feitas para o servidor de desenvolvimento, em seguida, executando essas declarações à mão sobre o servidor ao vivo (ou rolando-os em um script de upgrade ou migração). É mais tedioso, mas vai manter seus dados seguros. E pelo tempo que você começar a permitir o acesso aos usuários finais para seu site, você está realmente indo fazer alterações de dados constante pesado?

Tenha um olhar em http://www.liquibase.org/

verificação: http://schemasync.org/ as obras de ferramentas schemasync para mim, é uma ferramenta de linha de comando funciona facilmente em linha de comando linux

Há uma outra ferramenta mysql-diff de linha de comando de código aberto:

http://bitbucket.org/stepancheg/mysql-diff/

Não é uma ferramenta útil escrito usando perl chamado Maatkit . Ele tem várias comparação de dados e ferramentas de sincronização entre outras coisas.

SQL Compare por RedGate http://www.red-gate.com/products/SQL_Compare/index. htm

DBDeploy para ajudar com o gerenciamento de mudanças de banco de dados de forma automatizada http://dbdeploy.com/

Para mim, eu começaria com despejo dois bancos de dados e diffing lixeiras, mas se quiser que os programas de mesclagem gerados automaticamente, você vai querer obter uma ferramenta real.

Um simples Google procurar virou-se as seguintes ferramentas:

Dê uma olhada dbForge Data Compare para MySQL . É um shareware com 30 dias de período experimental livre. É uma ferramenta rápida MySQL GUI para comparação de dados e sincronização, gestão de diferenças de dados e sincronização personalizável.

dbForge Data Compare para MySQL

Depois de horas pesquisando na web para ferramenta simples, eu percebi que eu não olhar no Ubuntu Software Center. Aqui é uma solução gratuita i encontrado: http://torasql.com/ Eles afirmam ter uma versão para Windows também, mas eu só estou usando-o no Ubuntu.

Edit: 2015-Fev-05 Se você precisa de ferramentas do Windows, sapo é perfeito e livre: http://software.dell.com/products/toad-for-mysql/

O Apache biblioteca de componentes zeta é uma biblioteca de propósito geral de componentes loosly acopladas para o desenvolvimento de aplicações baseadas em PHP 5.

Componentes eZ - DatabaseSchema permite que você:

   .Create/Save a database schema definition;
   .Compare database schemas;
   .Generate synchronization queries;

Você pode verificar o tutorial aqui: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema /tutorial.html

Muito fácil de usar comparação e ferramenta de sincronização:
Database Comparer http://www.clevercomponents.com/products/dbcomparer/index.asp

Vantagens:

  • rápido
  • fácil de usar
  • fácil selecionar as mudanças de aplicar

Desvantagens:

  • faz comprimento não sincronização para pequenas ints
  • faz nomes de índice não sincronização corretamente
  • não comentários de sincronização

Navicat for MySQL será útil para este caso . Ele suporta sincronização de dados e estrutura para o MySQL. enter descrição da imagem aqui

Para a primeira parte da pergunta, eu apenas fazer um despejo de ambos e diff-los. Não tenho certeza mysql, mas postgres pg_dump tem um comando para simplesmente despejar o esquema sem o conteúdo da tabela, assim você pode ver se você mudou o esquema qualquer.

Eu estou trabalhando com a equipe de Marketing da Nob Hill, eu queria dizer que eu vou ser feliz em ouvir suas perguntas, sugestões ou qualquer outra coisa, não hesite em contactar-me.

Nós originalmente decidiu criar nossa ferramenta a partir do zero, porque enquanto há outros tais produtos no mercado, nenhum deles fazer o trabalho direito. É muito fácil para mostrar as diferenças entre bancos de dados. É outra bem diferente é realmente fazer um banco de dados como o outro. Suavizar a migração, tanto de esquema e dados, sempre foi um desafio. Bem, temos conseguido isso aqui.
Estamos tão confiantes de que poderia fornecer-lhe uma migração suave, do que se isso não acontecer - se os scripts de migração que gera não são legíveis o suficiente ou não vai funcionar para você, e não podemos corrigi-lo em cinco dias úteis - você vai ter a sua própria cópia grátis!

http://www.nobhillsoft.com/NHDBCompare.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top