Categorias: Concursos Públicos

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

Thiago Rodrigues Cavalcanti

Posts recentes

Incidência do ITCD para SEFAZ/GO

E aí, gente!! Neste novo artigo do Estratégia Concursos vamos analisar um assunto muito importante para a prova de Auditor Fiscal de Goiás: incidência do ITCD para SEFAZ/GO de acordo com a…

47 segundos atrás

Concurso Igarapé MG: gabaritos publicados!

A aplicação das provas do concurso público da Prefeitura de Igarapé, município de Minas Gerais,…

6 minutos atrás

Concurso Arraial do Cabo: gabaritos de nível superior!

Foram publicados os gabaritos preliminares dos cargos de nível superior do concurso da Prefeitura de…

18 minutos atrás

Concurso Vilhena RO: confira já os gabaritos da prova!

Foram realizadas no dia 15 de março as provas do concurso público da Prefeitura de…

28 minutos atrás

Concurso Alcântara: gabaritos divulgados!

A Prefeitura de Alcântara, no Maranhão, aplicou a etapa de provas objetivas do seu concurso…

30 minutos atrás

Diagramas Lógicos para Concursos

Olá, alunos! Tudo bem? Neste artigo vamos falar sobre um tema bem importante na matéria…

51 minutos atrás