AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 7785
Accepted
Cerin
Cerin
Asked: 2011-11-12 15:12:05 +0800 CST2011-11-12 15:12:05 +0800 CST 2011-11-12 15:12:05 +0800 CST

mysqldump incompleto

  • 772

Estou tentando executar o mysqldump para criar um instantâneo do banco de dados e descobri que ele irá parar aleatoriamente no meio do caminho, sem relatar nenhum erro. Meu banco de dados é relativamente pequeno (cerca de 100 MB) e está usando o InnoDB.

Estou executando assim:

mysqldump --force --single-transaction --quick --user myuser --password=mypass -h mydatabasehost mydb > /tmp/snapshot.sql

Verificar os relatórios de código de saída 0.

Minha versão é: mysqldump Ver 10.13 Distrib 5.1.52, para redhat-linux-gnu (i386)

Eu vi algumas postagens semelhantes e até um relatório de bug oficial , mas nenhuma das soluções parece se aplicar.

Como faço para que o mysqldump tire um instantâneo completo do banco de dados?

EDIT: Meu banco de dados atualmente reside no RDS da Amazon.

mysql backup
  • 5 5 respostas
  • 20404 Views

5 respostas

  • Voted
  1. Best Answer
    Cerin
    2011-11-22T13:03:06+08:002011-11-22T13:03:06+08:00

    Pode ter sido um problema max_allowed_packetnão ter sido definido alto o suficiente no cliente (ou seja, mysqldump) e no servidor (ou seja, Amazon RDS). Eu configurei isso para 500M em ambos e isso parece ter resolvido o problema.

    Como as tabelas de esquema de informações do InnoDB fornecem apenas estimativas de contagem de linhas, é difícil dizer se meu instantâneo realmente inclui tudo do RDS. Todas as tabelas estão lá, mas as contagens de linhas são diferentes. Atualizarei com uma resposta mais definitiva quando tiver algum tempo para escrever uma análise mais completa.

    • 6
  2. Rui Marques
    2011-11-22T08:38:51+08:002011-11-22T08:38:51+08:00

    Você tentou?

    mysqldump --compress --add-drop-table data --routines --events  --comments --extended-insert -h {host} -u {user} -p {database} > dbdump.sql
    

    Isso é simples do jeito que eu sempre faço sem problemas. Basicamente, fazendo o dump dessa forma, você obtém tudo o que possui (dados, objetos e às vezes comentários preciosos) em um determinado momento, ignorando as transações não confirmadas.

    • 4
  3. Noam Kremen
    2011-11-13T00:54:02+08:002011-11-13T00:54:02+08:00

    Pelo que entendi, o mysql docs --single-transaction falhará se uma leitura for executada na tabela enquanto você estiver despejando. Qual é o resultado ao executar sem "--force --single-transaction --quick"?

    • 1
  4. RolandoMySQLDBA
    2011-12-07T08:39:32+08:002011-12-07T08:39:32+08:00

    É inteiramente possível que a tabela esteja corrompida. Não quero dizer que os dados e/ou páginas de índice estejam danificados. Pode haver algo muito simples que está quebrado.

    Recentemente, experimentei um problema com um script de backup em um Servidor Escravo quando eu paralelo mysqldump vários bancos de dados. Executar mysqldump em um dos bancos de dados resultou em um mysqldump muito pequeno. O banco de dados tinha mais de 80 tabelas. No entanto, o mysqldump parou na quinta tabela no banco de dados. Quando eu rodava SHOW CREATE TABLE tblname\Gna mesa no Slave, dava o erro "Table Not Found". Quando executei SHOW CREATE TABLE tblname\Gno Master, a descrição da tabela foi exibida conforme o esperado.

    O que aconteceu foi meio maluco: um cliente pediu a restauração da tabela e um engenheiro restaurou o arquivo .ibd da tabela InnoDB a partir de um backup em disco. O id do tablespace do arquivo .ibd (que era 25) não correspondia ao id do tablespace registrado em ibdata1 (que era 28).

    Corrigi o problema hospedando o escravo, mysqldumping o mestre e configurando a replicação do zero. Felizmente, o spave de dados e índice totalizou 7 GB. Portanto, o processo rstore não era grande coisa.

    MORAL DA HISTÓRIA

    O problema básico é que o mysqldump não reporta um erro em um InnoDB quando o id do tablespace está incorreto. Quando um mysqldump termina e não despeja todas as tabelas em ordem alfabética, isso indica que ele foi encerrado por um erro e o fez sem imprimir uma mensagem de erro.

    Verifique para ter certeza

    • você pode exibir a estrutura da tabela usandoSHOW CREATE TABLE
    • você pode consultar tudo sobre uma tabela de INFORMAÇÃO_SCHEMA.TABLES
    • 1
  5. RolandoMySQLDBA
    2011-11-13T08:06:51+08:002011-11-13T08:06:51+08:00

    O seguinte é apenas um brainstorming sobre mysqldump e InnoDB:

    Por favor, pense sobre o comportamento do mysqldump em relação a uma tabela InnoDB. Se houver alguma página suja no InnoDB Buffer Pool pertencente a uma tabela que você está descarregando, as páginas sujas dessa tabela devem ser descarregadas no disco antes que um SELECT /* SQL_NO_CACHE */possa ser executado nela.

    Como você está usando o Amazon RDS, meu pressentimento é que seu banco de dados está em uma infraestrutura multitenant (sinta-se à vontade para corrigir esta afirmação se eu estiver simplificando demais). Outros bancos de dados podem estar usando um InnoDB Buffer Pool compartilhado, um arquivo de metadados compartilhado (ibdata1) e um tablespace compartilhado (ibdata1 se innodb_file_per_table estiver desabilitado).

    Também pode haver alguma redundância do banco de dados, o que pode afetar o MVCC no banco de dados, mesmo que seja um conjunto de dados pequeno.

    Você pode querer aumentar innodb_lock_wait_timeout (padrão 50 segundos) em sua sessão mysqldump para ver se isso tem algum efeito no Amazon RDS (ou fazer com que a Amazon aumente esse limite). Além disso, tente fazer o dump de tabelas individuais.

    ATUALIZAÇÃO 2011-11-14 17:58 EDT

    Tente executar isso em sua sessão de banco de dados (defina para dois minutos):

    SET innodb_lock_wait_timeout = 120;
    
    • 0

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve