Comparar duas bases de dados MySQL [fechadas]

Estou a desenvolver uma aplicação usando uma base de dados MySQL.

a estrutura da base de dados ainda está em fluxo e muda enquanto o desenvolvimento progride (eu mudo a minha cópia local, deixando a um no servidor de teste sozinho).

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

ainda que de momento esteja simplesmente a descartar a base de dados do servidor de testes anterior está bem, à medida que o teste começa a introduzir dados de testes, pode tornar-se um pouco complicado.
O mesmo embora mais Assim acontecerá novamente mais tarde na produção...

Existe uma maneira fácil de fazer alterações incrementais na base de dados de produção, de preferência criando automaticamente uma um guião para o modificar?


ferramentas mencionadas nas respostas:

Author: Rob, 2008-10-22

21 answers

Se estiver a trabalhar com pequenas bases de dados, encontrei a correr o mysqldump em ambas as bases de dados com as opções --skip-comments e --skip-extended-insert para gerar os programas SQL, então a execução do diff nos programas SQL funciona bastante bem.

Ao omitir comentários, evita diferenças insignificantes, como a altura em que executou o comando mysqldump. Ao usar o comando --skip-extended-insert, garante 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 um reacção em cadeia em todas as futuras declarações de inserção. Correr com essas opções produz dumps maiores, Sem comentários, então isso provavelmente não é algo que você quer fazer no uso da produção, mas para o desenvolvimento deve ser bom. Coloquei exemplos dos comandos que 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
 210
Author: Jared, 2014-10-07 15:40:43

Toad for MySQL has data and schema compare features, and I believe it will even create a synchronization script. O melhor de tudo, é freeware.

 99
Author: Anson Smith, 2014-07-07 00:36:12

Uso um software chamado Navicat para:

    Sincronizar bases de dados ao vivo com as minhas bases de dados de testes. Mostra diferenças entre as duas bases de dados.
Custa dinheiro, só janelas e mac, e tem um UI maluco, mas eu gosto.
 20
Author: seanyboy, 2008-10-22 13:52:46

Existe uma ferramenta de sincronização de esquemas em SQLyog (comercial) que gera SQL para sincronizar duas bases de dados.

enter image description here

 17
Author: Yury Litvinov, 2011-04-01 16:32:54

Da lista de comparação de funcionalidades... O MySQL Workbench oferece sincronização de esquemas e esquemas na sua edição comunitária.

 13
Author: andyhky, 2008-10-22 13:50:30
Há muitas maneiras, certamente, mas no meu caso prefiro o comando dump e diff. Aqui está um guião baseado no comentário do 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:)

 13
Author: develCuy, 2012-04-23 18:02:11
DbSolo, é pago, mas este recurso pode ser o que procuras. http://www.dbsolo.com/help/compare.html

Funciona com Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 e MySQL alt text

 12
Author: jmpeace, 2010-10-21 22:30:48

Se você só precisa comparar esquemas (não dados), e ter acesso a Perl, mysqldiff pode funcionar. Eu usei-o porque ele permite que você compare bancos de dados locais com bancos de dados remotos (via SSH), então você não precisa se preocupar em despejar quaisquer dados.

Http://adamspiers.org/computing/mysqldiff/

Ele vai tentar gerar consultas SQL para sincronizar duas bases de dados, mas eu não confio nele (ou em qualquer ferramenta, na verdade). Tanto quanto sei, não há uma maneira 100% fiável de fazer engenharia reversa. as alterações necessárias para converter um esquema de banco de dados para outro, especialmente quando várias alterações foram feitas.

Por exemplo, se você mudar apenas o tipo de uma coluna, uma ferramenta automatizada pode facilmente adivinhar 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 que se mantenha a par de todas as alterações que fizer ao desenvolvimento. servidor, em seguida, executando essas declarações manualmente no servidor ao vivo (ou rodando-os em um script de atualização ou migração). É mais entediante, mas manterá os seus dados seguros. E no momento em que você começar a permitir o acesso dos usuários finais ao seu site, você realmente vai estar fazendo mudanças pesadas constantes de banco de dados?
 11
Author: Zac, 2015-02-18 15:02:35
 7
Author: anders.norgaard, 2008-10-22 13:46:46

Verifique: http://schemasync.org/ a ferramenta schemasync funciona para mim, é uma ferramenta de linha de comandos funciona facilmente na linha de comandos linux

 6
Author: likeuclinux, 2011-04-12 18:08:37

Existe outra ferramenta mysql-diff de código aberto:

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

 4
Author: stepancheg, 2009-02-07 21:22:49

Existe uma ferramenta útil escrita usando o perl chamado Maatkit . Ele tem várias ferramentas de comparação de banco de dados e sincronização, entre outras coisas.

 3
Author: Jarod Elliott, 2008-10-22 13:44:39

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

DBDeploy para ajudar com a gestão de alterações de bases de dados de uma forma automatizada http://dbdeploy.com/

 3
Author: George, 2008-10-22 13:53:29

Para mim, eu começaria com o despejo de ambas as bases de dados e a difusão das lixeiras, mas se você quiser scripts de junção gerados automaticamente, você vai querer obter uma ferramenta real.

Uma simples pesquisa no Google revelou as seguintes ferramentas:

 3
Author: Craig Trader, 2008-10-22 13:54:14

Dê uma olhada em dbForge Data Compare para MySQL. É um shareware com 30 dias de experiência livre. É uma ferramenta GUI MySQL rápida para comparação de dados e sincronização, gerenciamento de diferenças de dados e sincronização personalizável.

dbForge Data Compare for MySQL

 3
Author: Devart, 2010-09-24 11:21:45
Depois de horas procurando na web por ferramentas simples, percebi que não procurei no Ubuntu Software Center. Aqui está uma solução livre que eu encontrei: http://torasql.com/ Eles afirmam ter uma versão para Windows também, mas eu só estou usando sob Ubuntu.

Editar: 2015-Fev-05 Se você precisa de Ferramenta Windows, TOAD é perfeito e livre: http://software.dell.com/products/toad-for-mysql/

 3
Author: Nikolay Ivanov, 2015-02-05 12:29:20

A biblioteca de componentes Zeta apache é uma biblioteca de propósito geral de componentes vagamente acoplados para o desenvolvimento de aplicações baseadas no PHP 5.

EZ Components-DatabaseSchema permite-lhe:

   .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

 2
Author: Naim Zard, 2010-11-24 09:01:31

É muito fácil usar a ferramenta de comparação e sincronização:
Comparador De Bases De Dados http://www.clevercomponents.com/products/dbcomparer/index.asp

Vantagens:

  • Rápido
  • Fácil de usar
  • Fácil de seleccionar as alterações a aplicar

Desvantagens:

  • não sincroniza o comprimento com os minúsculos ints
  • não sincroniza correctamente os nomes dos índices
  • não sincroniza os comentários
 2
Author: Artem Goutsoul, 2013-02-28 11:42:16

Acho queNavicat para o MySQL será útil para este caso. Ele suporta sincronização de dados e estrutura para MySQL. enter image description here

 1
Author: , 2011-01-25 08:05:27
Para a primeira parte da pergunta, faço uma cagada de ambos e descubro-os. Não tenho a certeza sobre o mysql, mas o postgres pg_dump tem um comando para simplesmente descarregar o esquema sem o conteúdo da tabela, para que você possa ver se você mudou o esquema algum.
 0
Author: Paul Tomblin, 2008-10-22 13:43:12
Estou a trabalhar com a equipa de Marketing da Nob Hill, queria dizer-lhe que ficarei feliz em ouvir as suas perguntas, sugestões ou qualquer outra coisa, por favor, esteja à vontade para me contactar. Originalmente decidimos criar a nossa ferramenta do zero, porque enquanto existem outros produtos desse tipo no mercado, nenhum deles faz o trabalho certo. É muito fácil mostrar-lhe as diferenças entre bases de dados. É bem diferente fazer uma base de dados como a outra. Migração suave, tanto do esquema como data, sempre foi um desafio. Bem, conseguimos isso aqui.
Estamos tão confiantes de que ele poderia fornecer – lhe uma migração suave, do que se não o fizer – se os scripts de migração que gera não são legíveis o suficiente ou não funcionará para você, e não podemos corrigi-lo em cinco dias úteis-você terá sua própria cópia gratuita!

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

 0
Author: , 2009-01-22 19:09:57