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 / 20272
Accepted
Dave Rix
Dave Rix
Asked: 2012-07-03 08:06:41 +0800 CST2012-07-03 08:06:41 +0800 CST 2012-07-03 08:06:41 +0800 CST

Erro ao ler o log binário do MySQL 5.5 usando mysqlbinlog

  • 772

Estou tendo alguns problemas com uma configuração de replicação que estou usando. Está funcionando bem há meses e, no fim de semana, o escravo parou de ler as atualizações do log binário do mestre com um erroGot fatal error 1236 from master when reading data from binary log: 'bogus data in log event'

Ao tentar ler o log binário relevante usando mysqlbinlog, recebo o erro mostrado abaixo;

[root@slglcd-01] # mysqlbinlog ibm-pr-slglcd-01.000075 > /dev/null
ERROR: Error in Log_event::read_log_event(): 'Event too small', data_len: 0, event_type: 0
ERROR: Could not read entry at offset 1828: Error in log format or read error.
[root@slglcd-01] #

Frustrante! Eu tentei usar várias combinações de --start-positione --offsetpara tentar superar os dados ruins, e nada parece estar funcionando...

O que estou procurando é uma maneira de pular (ou remover) esse erro de dentro do log binário, criando um novo log binário sem o item ofensivo, para que eu possa continuar minha replicação.

Não estou preocupado em perder a instrução, este é um banco de dados de coleção de syslog e uma linha ausente não vai doer.

O que não posso fazer é recriar o escravo a partir do mestre, pois o mestre usa o BLACKHOLEmecanismo e, portanto, não possui dados reais armazenados ...

Se o pior acontecer, terei que começar a partir do próximo log binário na sequência e perder os dados deixados no log ofensivo.

Desde já obrigado Dave

mysql replication
  • 2 2 respostas
  • 8027 Views

2 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-07-03T08:29:35+08:002012-07-03T08:29:35+08:00

    Como o log binário no mestre está corrompido, não há mais nada que você possa fazer. Minhas condolencias. Basta pular para o próximo binlog:

    STOP SLAVE;
    CHANGE MASTER TO master_log_file='ibm-pr-slglcd-01.000076',master_log_pos=107;
    START SLAVE;
    

    Obviamente, 107 é a posição inicial dos binlogs do MySQL 5.5. Se o Master for 5.1 (ou 5.0.95), use 106. Se o Master for anterior a 5.1, use 98.

    Se a corrupção do Master BinLog for frequente, você pode precisar considerar o uso de um tamanho menor para os logs binários no Master (talvez 128M em vez do 1G padrão):

    [mysqld]
    max_binlog_size=128M
    

    Isso não impedirá a corrupção, mas diminuir o tamanho minimizará a perda de dados de 1G para 128M.

    • 2
  2. Dietmar
    2012-07-03T08:58:48+08:002012-07-03T08:58:48+08:00

    Eu tive um problema muito semelhante uma vez.

    Como você já mencionou, o problema é encontrar uma --start-position correta.

    Eu resolvi isso olhando para o arquivo binlog corrompido com um hexeditor / xxd (para encontrar alguns blocos zerados na posição corrompida no meu caso), pulando esta parte obviamente quebrada do arquivo binlog procurando a próxima parte onde alguns A instrução SQL útil estava visível no hexdump e o log binário estava possivelmente intacto novamente.

    Para identificar um cabeçalho binlog correto no Hexdump, examinei os documentos do desenvolvedor em http://forge.mysql.com/wiki/MySQL_Internals_Binary_Log .

    Basicamente, um cabeçalho começa com um registro de data e hora (4 bytes), um arquivo de tipo (1 byte) e o Master-Server-Replication-ID (4 bytes).

    O ID do servidor foi relativamente fácil de identificar no meu caso, então subtraí 5 do que pensei ser a posição do ID do servidor e inseri esse valor como posição inicial para mysqlbinlog - e foi feliz.

    Definir isso como novo mestre-pos no escravo finalmente fez com que a replicação fosse executada novamente.

    Sim, isso é "sujo" e você perde algumas declarações, mas como você já sabe disso, talvez isso ajude no seu caso.

    • 1

relate perguntas

  • 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ê?

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

  • 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 ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

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

    • 4 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

    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
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +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
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +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