Comparar duas bases de dados MySQL [fechadas]
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...
ferramentas mencionadas nas respostas:
- esquema MySQL da Red-Gate & Data Compare (comercial)
- Maatkit (agora Percona)
- liquibase
- Sapo
- Base De Dados Nob Hill Compare (Comercial)
- Diferenças De MySQL
- SQL EDT (comercial)
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.
--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
Toad for MySQL has data and schema compare features, and I believe it will even create a synchronization script. O melhor de tudo, é freeware.
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.
Existe uma ferramenta de sincronização de esquemas em SQLyog (comercial) que gera SQL para sincronizar duas bases de dados.
Da lista de comparação de funcionalidades... O MySQL Workbench oferece sincronização de esquemas e esquemas na sua edição comunitária.
#!/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:)
Funciona com Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 e MySQL
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?Olha para http://www.liquibase.org/
Verifique: http://schemasync.org/ a ferramenta schemasync funciona para mim, é uma ferramenta de linha de comandos funciona facilmente na linha de comandos linux
Existe outra ferramenta mysql-diff de código aberto:
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.
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/
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:
- ([9]) MySQL Workbench , disponível na comunidade (OSS) e em variantes comerciais.
- base de dados Nob Hill compare , disponível gratuitamente para o MySQL.
- uma lista de outra comparação SQL ferramenta.
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.
Editar: 2015-Fev-05 Se você precisa de Ferramenta Windows, TOAD é perfeito e livre: http://software.dell.com/products/toad-for-mysql/
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
É 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
Acho queNavicat para o MySQL será útil para este caso. Ele suporta sincronização de dados e estrutura para MySQL.
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!