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 / 10184
Accepted
Abdul Manaf
Abdul Manaf
Asked: 2012-01-05 21:34:23 +0800 CST2012-01-05 21:34:23 +0800 CST 2012-01-05 21:34:23 +0800 CST

Erro de replicação do MySQL

  • 772

Estou recebendo um erro no escravo como:

não foi possível executar o evento Write_rows na tabela mydatabasename.atable; Entrada duplicada '174465' para chave 'PRIMARY', Error_code: 1062; erro do manipulador HA_ERR_FOUND_DUPP_KEY; o log mestre do evento mysql-bin.000004, end_log_pos 60121977

Como estou recebendo atualizações diretamente do mestre, por que isso acontece.

Como podemos lidar com isso de maneira eficaz para que não haja perda de dados no escravo. Não quero configurar toda a replicação novamente para manter a integridade dos dados.

Obrigado..!

mysql replication
  • 4 4 respostas
  • 45523 Views

4 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-01-06T08:24:20+08:002012-01-06T08:24:20+08:00

    Sempre que houver um erro 1062, a tabela usual com o problema é a tabela real que está sendo atualizada na consulta. A consulta deve aparecer na saída deSHOW SLAVE STATUS\G

    Por exemplo, em seu erro, ele diz Duplicate entry '174465' for key 'PRIMARY'. Isso indica que você deve procurar o valor 174465na tabela que está fazendo um INSERT ou UPDATE. Se a linha existir, você pode decidir se a execução interrompida da consulta alterará o conteúdo da linha. Se a consulta simplesmente reproduzir exatamente o mesmo conteúdo e você acredita que esse será o caso, você pode executar uma das duas opções:

    OPÇÃO 1

    Ignore o erro, aguarde 5 segundos e visualize o Status do Escravo. Aqui estão os 5 passos para pular um erro

    STOP SLAVE;
    SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
    START SLAVE;
    SELECT SLEEP(5);
    SHOW SLAVE STATUS\G
    

    Quando você visualiza o Status do Escravo, aqui está o que esperar

    • Se Seconds_Behind_Master for NULL

      • A replicação está quebrada: procure por sinais indicadores
      • Se o número do erro for 1062 novamente, repita as 5 etapas para ignorar um erro
    • Se Seconds_Behind_Master for um número

      • A replicação está em execução
      • Quando Seconds_Behind_Master > 0, a replicação está alcançando.
      • Quando Seconds_Behind_Master = 0, a replicação é totalmente capturada.

    OPÇÃO 2

    Remova a linha para permitir que a replicação continue

    Exclua a linha da tabela no Slave e execute as 4 etapas a seguir para ignorar um erro:

    STOP SLAVE;
    START SLAVE;
    SELECT SLEEP(5);
    SHOW SLAVE STATUS\G
    

    Correndo o risco de soar redundante...

    Quando você visualiza o Status do Escravo, aqui está o que esperar

    • Se Seconds_Behind_Master for NULL

      • A replicação está quebrada: procure por sinais indicadores
      • Se o número do erro for 1062 novamente, exclua a linha Repita as 4 etapas para ignorar um erro
    • Se Seconds_Behind_Master for um número

      • A replicação está em execução
      • Quando Seconds_Behind_Master > 0, a replicação está alcançando.
      • Quando Seconds_Behind_Master = 0, a replicação é totalmente capturada.

    E se houver muitos problemas de chave duplicados? Aqui estão alguns dos meus posts anteriores sobre como usar mk-table-checksum do MAATKIT , mk-table-sync , pt-table-checksum , pt-table-sync :

    • Em uma replicação MySQL Master/Slave, o que aconteceria se eu escrevesse no Slave?
    • Corrigindo tabelas fora de sincronia conforme relatado por pt-table-checksum, pt-table-sync não está funcionando
    • Problema de replicação do MySQL: o escravo ficou fora de sincronia
    • 15
  2. ragesh K
    2020-04-06T04:10:28+08:002020-04-06T04:10:28+08:00

    Eu fiz um script como abaixo para resolver este problema:

    Crie um script SQL que irá parar o slave e defina SQL_SLAVE_SKIP_COUNTERpara então iniciar o slave.

    >>cat mysql_skip.sql
    stop slave;
    SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
    start slave;
    SELECT SLEEP(1);
    

    então :

    >>cat mysql_skip.sh
    
    dup_status=`mysql -uroot -p************** --execute="show slave status"|grep HA_ERR_FOUND_DUPP_KEY|wc -l`
    while [ $dup_status -ne 0 ]
    do
            mysql -uroot -p************** < mysql_skip.sql
            dup_status=`mysql -uroot -p************** --execute="show slave status"|grep HA_ERR_FOUND_DUPP_KEY|wc -l`
            mysql -uroot -p************** --execute="show slave status"|grep HA_ERR_FOUND_DUPP_KEY
            echo $dup_status
    done
    

    Dessa forma, abordei o conflito de replicação de escravos. Isso pode ajudar a todos.

    • 3
  3. sepideh nejat
    2019-10-22T02:24:53+08:002019-10-22T02:24:53+08:00

    Na minha situação, as coordenadas de replicação do escravo foram quebradas e consertei isso redefinindo meu escravo e conectando meu escravo ao mestre por novas coordenadas sem perda de dados. Primeiro, verifique se o seu slave gtid_slave_pos é diferente de outros slaves ou master gtid_current_pos:

        # on master
        SELECT @@GLOBAL.gtid_current_pos;
    
        +---------------------------+ 
        | @@GLOBAL.gtid_current_pos |
        +---------------------------+
        | 0-1-2                     |
        +---------------------------+
    
        # on slave
        SELECT @@GLOBAL.gtid_slave_pos;
    
        +-------------------------+
        | @@GLOBAL.gtid_slave_pos |
        +-------------------------+
        | 0-1-4                   |
        +-------------------------+
    

    Então:

        RESET SLAVE;
        SET GLOBAL gtid_slave_pos = "0-1-2";
        CHANGE MASTER TO 
            MASTER_HOST="c1dbserver1", 
            MASTER_PORT=3310, 
            MASTER_USER="repl",  
            MASTER_PASSWORD="password", 
            MASTER_USE_GTID=slave_pos;
        START SLAVE;
    

    Você pode encontrar mais detalhes aqui https://mariadb.com/kb/en/library/using-mariadb-replication-with-mariadb-galera-cluster-configuring-mariadb-r/#start-replication-on-the-new -escravo

    • 1
  4. dragosrsupercool
    2016-11-17T05:54:50+08:002016-11-17T05:54:50+08:00

    O script a seguir continuará ignorando o contador global até que o erro de replicação seja corrigido. O erro de replicação geralmente ocorre quando o tempo de despejo do mestre difere da posição do mestre obtida.

    Tente este script:

    #!/bin/bash
    logfile=~/slave-watcher.log
    while true; do
        status=$(mysql --execute="show slave status\G"|grep "Seconds_Behind_Master:"|awk '{print $2}')
        if [ $status == "NULL" ]; then
            mysql --execute="show slave status\G" | grep "Last_SQL_Error:" | tee -a $logfile
            mysql --execute="set global sql_slave_skip_counter=1; start slave;"
        fi
        sleep 1
    done
    

    Nota: Para adicionar senha, modifique o script como este:

    mysql -p sua_senha --execute

    • -2

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