Este é o comando mysqldbcompare que pode ser executado no provedor de hospedagem gratuita OnWorks usando uma de nossas várias estações de trabalho online gratuitas, como Ubuntu Online, Fedora Online, emulador Windows online ou emulador MAC OS online
PROGRAMA:
NOME
mysqldbcompare - compare dois bancos de dados e identifique diferenças
SINOPSE
mysqldbcomparar [opções] db1 [: db2] ...
DESCRIÇÃO
Este utilitário compara os objetos e dados de dois bancos de dados para encontrar diferenças. Isto
identifica objetos com definições diferentes nos dois bancos de dados e os apresenta em
um formato de estilo diff de escolha. As diferenças nos dados são mostradas usando um similar
formato de estilo diff. Linhas alteradas ou ausentes são mostradas em um formato padrão de GRID, CSV,
TAB ou VERTICAL.
Use a notação db1: db2 para nomear dois bancos de dados para comparar ou, alternativamente, apenas db1 para
compare dois bancos de dados com o mesmo nome. O último caso é uma notação de conveniência para
comparando bancos de dados com o mesmo nome em servidores diferentes.
A comparação pode ser executada em dois bancos de dados de nomes diferentes em um único servidor por
especificando apenas o --servidor1 opção. O usuário também pode se conectar a outro servidor por
especificando o --servidor2 opção. Neste caso, db1 é obtido de server1 e db2 de
servidor2.
Esses objetos considerados no banco de dados incluem tabelas, visualizações, gatilhos, procedimentos,
funções e eventos. Uma contagem para cada tipo de objeto pode ser mostrada com o -vv opção.
A verificação é realizada por meio de uma série de etapas denominadas testes. Por padrão, o utilitário para
no primeiro teste com falha, mas você pode especificar o --run-todos-testes opção para causar o
utilitário para executar todos os testes, independentemente de seu estado final.
Nota: usando --run-todos-testes pode produzir falhas em cascata esperadas. Por exemplo, se a linha
as contagens diferem entre as duas tabelas que estão sendo comparadas, a consistência dos dados também falhará.
Os testes incluem o seguinte:
1. Verifique as definições do banco de dados
Uma verificação de condição prévia da existência do banco de dados garante que ambos os bancos de dados existam. Se eles fizerem
não, nenhum processamento posterior é possível e o --run-todos-testes opção é ignorada.
2. Verifique a existência de objetos em ambos os bancos de dados
O teste para objetos em ambos os bancos de dados identifica os objetos ausentes em um ou
outro banco de dados. Os testes restantes se aplicam apenas aos objetos que aparecem em ambos
bancos de dados. Para pular este teste, use o --skip-objeto-comparar opção. Isso pode ser útil
quando há objetos ausentes conhecidos entre os bancos de dados.
3. Compare as definições de objeto
As definições (o CRIAR declarações) são comparados e as diferenças são apresentadas. Para
pule este teste, use o --skip-diff opção. Isso pode ser útil quando há objeto
nomes de diferenças apenas que você deseja ignorar.
4. Verifique as contagens de linhas da tabela
Esta verificação garante que ambas as tabelas tenham o mesmo número de linhas. Isso não garante
que os dados da tabela são consistentes. É apenas uma verificação superficial para indicar possíveis
linhas ausentes em uma tabela ou na outra. A verificação de consistência de dados identifica o
linhas ausentes. Para pular este teste, use o --skip-row-count opção.
5. Verifique a consistência dos dados da tabela
Esta verificação identifica as linhas alteradas, bem como as linhas ausentes de um ou outro
as tabelas nos bancos de dados. As linhas alteradas são exibidas como um relatório de estilo diff com
o formato escolhido (GRID por padrão) e as linhas ausentes também são exibidas usando o
formato escolhido. Para pular este teste, use o --skip-verificação de dados opção.
Você pode querer usar as opções --skip-xxx para executar apenas um dos testes. Isso pode ser
útil ao trabalhar para trazer dois bancos de dados em sincronização, para evitar a execução de todos
os testes repetidamente durante o processo.
Cada teste é concluído com um dos seguintes estados:
· passar
O teste foi bem-sucedido.
· FALHA
O teste falhou. Os erros são exibidos após a linha de estado de teste.
· PULAR
O teste foi ignorado devido a um pré-requisito ausente ou a uma opção de ignorar.
· WARN
O teste encontrou um erro incomum, mas não fatal.
· -
O teste não é aplicável a este objeto.
Para especificar como exibir a saída de estilo diff, use um dos seguintes valores com o
--difftype opção:
· unificado (Padrão)
Exibir saída de formato unificado.
· contexto
Exibir a saída do formato do contexto.
· diferir
Exibir saída de formato de estilo diferente.
· sql
Exibir a saída da instrução de transformação SQL.
Para especificar como exibir a saída para linhas alteradas ou ausentes, use um dos seguintes
valores com o --formato opção:
· grade (Padrão)
Exibir a saída em formato de grade ou tabela como o do mysql monitor.
· csv
Exibir a saída em formato de valores separados por vírgula.
· aba
Exibir a saída em formato separado por tabulação.
· vertical
Exibir a saída em formato de coluna única, como o do comando \ G para o mysql
monitor.
O --mudanças-para opção controla a direção da diferença (especificando o
objeto a ser transformado) no relatório de diferença (padrão) ou na transformação
relatório (designado com o --difftype = sql opção). Considere o seguinte comando:
mysqldbcompare --server1 = root @ host1 --server2 = root @ host2 --difftype = sql \
db1: dbx
O banco de dados mais à esquerda (db1) existe no servidor designado pelo --servidor1 opção
(host1). O banco de dados mais à direita (dbx) existe no servidor designado pelo --servidor2
opção (host2).
· --changes-for = server1: Produza uma saída que mostra como fazer as definições de
objetos em server1 como as definições dos objetos correspondentes em server2.
· --changes-for = server2: Produza uma saída que mostra como fazer as definições de
objetos em server2 como as definições dos objetos correspondentes em server1.
A direção padrão é server1.
Você deve fornecer parâmetros de conexão (usuário, host, senha e assim por diante) para uma conta
que possui os privilégios apropriados para acessar todos os objetos na operação.
Se o utilitário for executado em um servidor que tenha o registro binário habilitado e você não
deseja que as etapas de comparação sejam registradas, use o --disable-registro binário opção.
OPÇÕES
mysqldbcomparar aceita as seguintes opções de linha de comando:
· --Todos, -a
Inclui todos os bancos de dados. Adicionado na versão 1.3.5.
· --ajuda
Exiba uma mensagem de ajuda e saia.
· --Changes-for =
Especifique o servidor para mostrar as transformações para corresponder ao outro servidor. Por exemplo, para
veja a transformação para transformar as definições de objeto no server1 para corresponder ao
definições correspondentes no server2, use --changes-for = server1. Os valores permitidos são
Server1 e Server2. O padrão é Server1.
· --Difftype = , -d
Especifique o formato de exibição de diferença. Os valores de formato permitidos são unificado, contexto,
diferir e sql. O padrão é unificado.
· --Disable-binary-logging
Se o log binário estiver ativado, desative-o durante a operação para evitar a comparação
operações sejam gravadas no log binário. Nota: Desativando o registro binário
requer o SUPER privilégio.
· --Exclude = , -x
Exclua um ou mais bancos de dados da operação usando um nome específico, como
db1 ou um padrão de pesquisa. Use esta opção várias vezes para especificar vários
exclusões. Por padrão, os padrões usam padrões de banco de dados, como COMO. Com o --regexp
opção, os padrões usam expressões regulares para nomes correspondentes. Adicionado na versão 1.3.5.
· --Format = , -f
Especifique o formato de exibição para linhas alteradas ou ausentes. Os valores de formato permitidos são
grade, csv, aba e vertical. O padrão é grade.
· --Quiet, -q
Não imprima nada. Retorne apenas um código de saída de sucesso ou falha.
· --Regexp, --basic-regexp, -G
Execute combinações de padrões usando o REGEXP operador. O padrão é usar COMO for
Coincidindo. Adicionado na versão 1.3.5.
· --Run-all-tests, -t
Não pare na primeira diferença encontrada. Processe todos os objetos. Atalho alterado de
-a a -t na liberação-1.3.5.
· --Server1 =
Informações de conexão para o primeiro servidor no formato:
<usuário> [:passwd>] @hospedeiro> [:porta>] [:soquete>] oucaminho de login> [:porta>] [:soquete>].
· --Server2 =
Informações de conexão para o segundo servidor no formato:
<usuário> [:passwd>] @hospedeiro> [:porta>] [:soquete>] oucaminho de login> [::porta>] [::soquete>].
· --Mostrar-reverso
Produza um relatório de transformação contendo as instruções SQL para adequar o objeto
definições especificadas no reverso. Por exemplo, se --changes-for for definido como server1,
também gere a transformação para server2. Nota: As alterações reversas são anotadas
e marcados como comentários.
· --Skip-data-check
Ignore a verificação de consistência de dados.
· --Skip-diff
Ignore a verificação de diferença de definição de objeto.
· --Skip-object-compare
Ignore a verificação de comparação de objetos.
· --Skip-row-count
Ignore a verificação da contagem de linhas.
· --Span-key-size =
Altere o tamanho da chave usada para comparar o conteúdo da tabela. Um valor mais alto pode ajudar a
obter resultados mais precisos comparando grandes bancos de dados, mas pode tornar o algoritmo mais lento.
O valor padrão é 8.
· --Verbose, -v
Especifique quanta informação exibir. Use esta opção várias vezes para aumentar
a quantidade de informações. Por exemplo, -v = verboso, -vv = mais detalhado, -vvv =
depurar.
· --Version
Exibir informações da versão e sair.
· --Width =
Altere a largura de exibição do relatório de teste. O padrão é 75 caracteres.
NOTAS
O usuário de login deve ter as permissões apropriadas para ler todos os bancos de dados e tabelas
listados.
Para o --difftype opção, os valores permitidos não diferenciam maiúsculas de minúsculas. Além disso,
os valores podem ser especificados como qualquer prefixo inequívoco de um valor válido. Por exemplo,
--difftype = d especifica o tipo diferente. Ocorre um erro se um prefixo corresponder a mais de um
Valor válido.
O caminho para as ferramentas do cliente MySQL deve ser incluído na variável de ambiente PATH em
para usar o mecanismo de autenticação com caminhos de login. Isso permitirá que o utilitário
use as ferramentas my_print_defaults que são necessárias para ler os valores do caminho de login do
arquivo de configuração de login (.mylogin.cnf).
Se algum identificador de banco de dados especificado como um argumento contiver caracteres especiais ou for um
palavra reservada, então deve ser apropriadamente citada com crases (`) Por sua vez, nomes
citados com crases também devem ser citados com aspas simples ou duplas, dependendo do
sistema operacional, ou seja (") no Windows ou (') em sistemas não Windows, para que o
utilitários para ler identificadores entre aspas crônicas como um único argumento. Por exemplo, para
compare um banco de dados com o nome estranho`db.name com outro: weird`db.name, o par de banco de dados
deve ser especificado usando a seguinte sintaxe (em não Windows):
'`weird``db.name`:` other: weird``db.name`'.
EXEMPLOS
Use o seguinte comando para comparar os bancos de dados emp1 e emp2 no servidor local, e
execute todos os testes, mesmo se os testes anteriores falharem:
$ mysqldbcompare --server1 = root @ localhost emp1: emp2 --run-all-tests
# server1 em localhost: ... conectado.
# Verificando bancos de dados emp1 no servidor1 e emp2 no servidor2
AVISO: Objetos em server2: emp2, mas não em server1: emp1:
GATILHO: trg
PROCEDIMENTO: p1
TABELA: t1
VISUALIZAÇÃO: v1
Dados da linha de definição
Verificação da contagem de diferenças do nome do objeto do tipo
-------------------------------------------------- -------------------------
FUNÇÃO f1 passar - -
TABLE aprovação de departamentos passa FALHA
Diferenças de dados encontradas entre as linhas:
--- emp1.departamentos
+++ emp2.departamentos
@@ -1,4 +1,4 @@
************************** 1. linha ********************** ***
número_depto: d002
- dept_name: não sei
+ dept_name: Finanças
1 linhas.
Linhas em emp1.departments, não em emp2.departments
************************** 1. linha ********************** ***
número_depto: d008
dept_name: Pesquisa
1 linhas.
Linhas em emp2.departments, não em emp1.departments
************************** 1. linha ********************** ***
número_depto: d100
dept_name: estúpido
1 linhas.
TABLE passe passe passe dept_manager
Falha na verificação de consistência do banco de dados.
# ...feito
Dado: dois bancos de dados com o mesmo layout de tabela. Os dados de cada tabela contêm:
mysql> select * from db1.t1;
+ --- + --------------- +
| um | b |
+ --- + --------------- +
| 1 Teste 789 |
| 2 Teste 456 |
| 3 Teste 123 |
| 4 Nova linha - db1 |
+ --- + --------------- +
Linhas 4 no conjunto (0.00 seg)
mysql> select * from db2.t1;
+ --- + --------------- +
| um | b |
+ --- + --------------- +
| 1 Teste 123 |
| 2 Teste 456 |
| 3 Teste 789 |
| 5 Nova linha - db2 |
+ --- + --------------- +
Linhas 4 no conjunto (0.00 seg)
Para gerar as instruções SQL para transformações de dados para tornar db1.t1 o mesmo que db2.t1,
use o --changes-for = server1 opção. Devemos também incluir o -a opção para garantir que
o teste de consistência de dados é executado. O comando a seguir ilustra as opções usadas e
um trecho dos resultados gerados:
$ mysqldbcompare --server1 = root: root @ localhost \
--server2 = root: root @ localhost db1: db2 --changes-for = server1 -a \
--difftype = sql
[...]
# Definir dados da linha
# Type Nome do objeto Diff Count
Verificar #
-------------------------------------------------- -----------------------
# TABELA t1 passa passa FAIL
# # Transformações de dados para direction = server1:
# Diferenças de dados encontradas entre as linhas: UPDATE db1.t1 SET b = 'Teste 123'
ONDE a = '1'; ATUALIZAÇÃO db1.t1 SET b = 'Teste 789' ONDE a = '3'; EXCLUIR
DE db1.t1 ONDE a = '4'; INSERT INTO db1.t1 (a, b) VALORES ('5', 'Novo
linha - db2 ');
# Falha na verificação de consistência do banco de dados. # # ...feito
Da mesma forma, quando o mesmo comando é executado com --changes-for = server2 e --difftype = sql,
seguinte relatório é gerado:
$ mysqldbcompare --server1 = root: root @ localhost \
--server2 = root: root @ localhost db1: db2 --changes-for = server2 -a \
--difftype = sql
[...]
# Definir dados da linha
# Type Nome do objeto Diff Count
Verificar #
-------------------------------------------------- -----------------------
# TABELA t1 passa passa FAIL
# # Transformações de dados para direction = server2:
# Diferenças de dados encontradas entre as linhas: UPDATE db2.t1 SET b = 'Teste 789'
ONDE a = '1'; ATUALIZAÇÃO db2.t1 SET b = 'Teste 123' ONDE a = '3'; EXCLUIR
DE db2.t1 ONDE a = '5'; INSERT INTO db2.t1 (a, b) VALORES ('4', 'Novo
linha - db1 ');
Com o --difftype = sql Conjunto de opções de geração de SQL, --show-reverso mostra o objeto
transformações em ambas as direções. Aqui está um trecho dos resultados:
$ mysqldbcompare --server1 = root: root @ localhost \
--server2 = root: root @ localhost db1: db2 --changes-for = server1 \
--show-reverse -a --difftype = sql
[...]
# Definir dados da linha
# Type Nome do objeto Diff Count
Verificar #
-------------------------------------------------- -----------------------
# TABELA t1 passa passa FAIL
# # Transformações de dados para direction = server1:
# Diferenças de dados encontradas entre as linhas: UPDATE db1.t1 SET b = 'Teste 123'
ONDE a = '1'; ATUALIZAÇÃO db1.t1 SET b = 'Teste 789' ONDE a = '3'; EXCLUIR
DE db1.t1 ONDE a = '4'; INSERT INTO db1.t1 (a, b) VALORES ('5', 'Novo
linha - db2 ');
# Transformações de dados para direction = server2:
# Diferenças de dados encontradas entre as linhas: UPDATE db2.t1 SET b = 'Teste 789'
ONDE a = '1'; ATUALIZAÇÃO db2.t1 SET b = 'Teste 123' ONDE a = '3'; EXCLUIR
DE db2.t1 ONDE a = '5'; INSERT INTO db2.t1 (a, b) VALORES ('4', 'Novo
linha - db1 ');
# Falha na verificação de consistência do banco de dados. # # ...feito
DIREITOS AUTORAIS
Use mysqldbcompare online usando serviços onworks.net