Artigo

Zerando Suas Dúvidas – Parte 04 – MySQL (FGV)

O projeto zerando suas dúvidas segue firme e forte! Hoje respondemos a uma questão sobre replicação no MySQL.

Ano: 2016 Banca: FGV Órgão: IBGE Prova: Analista – Análise de Sistemas – Suporte Operacional

No MYSQL, os formatos de replicação correspondem aos formatos utilizados para registrar eventos nos logs. O formato conhecido como “statement-based binary logging”, utilizado desde as versões mais antigas, tem problemas com certas cláusulas e funções utilizadas nos comandos geradores dos eventos. Nesse contexto, analise as construções que podem aparecer num comando a ser replicado.

I. a cláusula LIMIT sem ORDER BY para comandos como UPDATE, DELETE, REPLACE;
II. a função RAND();
III. o comando TRUNCATE TABLE;
IV. funções definidas pelo usuário (UDF) que sejam determinísticas.

Comprometem a correta execução da replicação, no formato descrito, somente o que é citado em: 
  a) I e II; 
  b) I e III; 
  c) I, II e IV;
  d) II, III e IV; 
  e) III e IV.

Comentário:  

Vamos tentar esclarecer alguns aspectos sobre a replicação em MySql. Ela geralmente é baseada na existência de um servidor mestre que armazena as mudanças do banco de dados em um log binário. Neste cenário temos também a presença de diversos servidores escravos. Cada servidor escravo se conecta com o servidor mestre e solicita a cópia dos arquivos de log.

Os diferentes formatos de replicação utilizados correspondem ao formato de registo binário utilizado quando os eventos foram registrados no log binário do mestre. A correlação entre os formatos de log binário e os termos usados ​​durante a replicação definem os seguintes tipos de replicação:

Ao usar log binário baseado em instrução (statement-based replication – SBR), o mestre grava instruções SQL no log binário. A replicação do mestre para o escravo funciona executando as instruções SQL no escravo. Isso é chamado de replicação baseada em instruções, que corresponde ao formato do log binário padrão baseado em instrução MySQL. Os recursos de replicação do MySQL na versão 5.1.4 e em versões anteriores usavam exclusivamente esse formato.

Usando o log baseado em linha (row-based replication – RBR), o mestre grava eventos no log binário que indicam como as linhas de tabela individuais foram alteradas. A replicação do mestre para o escravo funciona copiando os eventos que representam as mudanças nas linhas da tabela para o escravo. Isso é chamado de replicação baseada em linha.

Você também pode configurar o MySQL para usar uma combinação de log baseado em instrução e em linha, dependendo de qual é mais apropriado para a alteração a ser registrada. Isso é chamado de log de formato misto (mixed).

Agora que você já entende o que seria uma replicação baseada em instruções vamos voltar nossa atenção aos itens da questão. Para respondê-la você precisa separar o que é ou não determinístico, ou seja o que podia variar de execução para a execução em um ambiente replicado.

Uma replicação “statement-based” que possui a clausula LIMIT nas operações de DELETE, UPDATE e INSERT … SELECT não é segura se a ordem das colunas da tabela não for definida. (Veja mais sobre o comando aqui). Quando você tenta executar comandos desta natureza, uma mensagem de warning avisando que o comando não é seguro é exibida.

RAND ([N]) é uma função do MySQL que retorna um valor numérico randômico entre 0 e 1. Essa função também não é segura (unsafe) quando usamos replicação statement-based.

O comando TRUNCATE TABLE é tratado para fins de logging e replicação como um comando DDL, desta forma ele pode ser registrado como uma instrução no arquivo de log. Perceba que a funcionalidade do comando é excluir todas as linhas de uma determinada tabela. Neste caso, observamos um evento perfeitamente determinístico.

A replicação de recursos invocados, tais como funções definidas pelo usuário (UDFs) e programas armazenados fornece as seguintes características: (1) os efeitos do recurso sempre são replicados, e (2)

As seguintes instruções são replicadas usando a replicação baseada em instruções: CREATE EVENT, ALTER EVENT, DROP EVENT, CREATE PROCEDURE, DROP PROCEDURE, CREATE FUNCTION, DROP FUNCTION, CREATE TRIGGER E DROP TRIGGER.

Analisando o exposto acima podemos encontrar nossa resposta na alternativa A.

Em brever voltamos com mais conteúdo!

Forte abraço e bons estudos,

Thiago Cavalcanti

Deixe seu comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Veja os comentários
  • Nenhum comentário enviado.