mysql - SQL escravo thread não está aplicando alterações

2

Eu tenho replicação master / slave com 5 escravos e 1 mestre. O mestre é o mysql 5.1.37 e os escravos são 5.5.8.

Dois dias atrás, um dos escravos parou de trabalhar. Em "show slave status", vejo que o encadeamento IO e o encadeamento SQL estão sendo executados. O encadeamento IO está gerando arquivos relay-log, mas o encadeamento SQL não está aplicando as alterações ... Os "segundos atrás do mestre" estão mostrando "0", embora eu saiba que está muito atrasado (verificando o log binário usando mysqlbinlog).

Todos os outros escravos estão funcionando corretamente.

Não sabe o que procurar (nenhum erro no arquivo de log do mysql e nenhum erro nos logs do sistema ...)

algum conselho? Veja abaixo a saída de status escravo

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master-db
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.020839
          Read_Master_Log_Pos: 56173153
               Relay_Log_File: research-relay-bin.000002
                Relay_Log_Pos: 252
        Relay_Master_Log_File: mysql-bin.020828
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: db1,db2,db3,db4
          Replicate_Ignore_DB: db5,db6
           Replicate_Do_Table:
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 975734937
              Relay_Log_Space: 10714389571
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 300
    
por zohara 19.05.2011 / 18:00

1 resposta

2

Existem algumas peculiaridades para procurar na Replicação do MySQL

1) Uso de replicate-do-db e replicate-ignore -db ao mesmo tempo

Existe um fluxograma na página para mostrar a ordem de processamento. Pessoalmente, eu não uso replicate-do-db e replicate-ignore-db ao mesmo tempo. Eu uso um ou outro. Se outros escravos não tiverem esse mesmo problema, descarte isso.

2) Fazendo o LOAD DATA INFILE

A maneira como o MySQL Replication lida com isso é chocante. Sempre que um LOAD DATA INFILE é executado em um mestre, todo o arquivo de entrada é depositado nos logs binários do mestre. O escravo reúne no arquivo de entrada em seus registros de relés. O escravo rematerializa o arquivo de dados na pasta / tmp e, em seguida, executa o LOAD DATA INFILE no escravo. Isso não é contado como atraso de replicação durante esse processo. Como um DBA MySQL, eu sei que isso funciona, mas isso é brega!

3) Falha na comunicação de thread do I / O escravo

Às vezes, devido a alterações de firewall, roteamento de rede ou alguma outra anomalia de rede, o thread de E / S escravo pode simplesmente parar de obter entradas para preencher seus logs de retransmissão. Você também pode querer verificar se o segmento de I / O escravo está visível na lista de processos do mestre. Para certificar-se de que o encadeamento IO do seu escravo esteja ativo, simplesmente faça o seguinte em todos os escravos:

SHOW SLAVE STATUS\G

Preste atenção no Relay_Log_Space. Deve estar crescendo. Se parar de crescer, o MySQL pode simplesmente congelar sem um erro por outro motivo maluco, o que leva à sugestão nº 4.

4) O escravo está sem espaço em disco

Eu escrevi um post sobre como o MySQL congela ao executar uma operação MyISAM . O MySQL usa tabelas MyISAM como tabelas temporárias. Verifique seu diretório padrão da tabela tmp (variável tmpdir no MySQL)

Espero que estas sugestões ajudem !!!

    
por 19.05.2011 / 18:44