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 / 9661
Accepted
quanta
quanta
Asked: 2011-12-24 03:23:06 +0800 CST2011-12-24 03:23:06 +0800 CST 2011-12-24 03:23:06 +0800 CST

Como tornar a replicação do MySQL confiável?

  • 772
  • Versão principal: 5.5.13-1
  • Versão escrava: 5.5.14-1
  • Formato de registro binário: MIXED

Meu banco de dados Escravo (~ 40 GB) está fora de sincronia com o Mestre. Não consigo encontrar nada interessante no log de erros. Google me dá um link muito útil .

Vou sincronizar novamente o banco de dados, siga esta instrução para minimizar o tempo de inatividade no mestre. Mas antes de fazer isso, só quero ter certeza de que essa situação será limitada no futuro. Vou examinar as partes acima para mostrar o que fiz:

  • O banco de dados escravo foi configurado com a read-onlyopção
  • Há algumas consultas inseguras. Ele apresenta alguns problemas com a replicação baseada em MIXED?
  • Eu repliquei todos os bancos de dados
  • Eu usei os mecanismos de armazenamento InnoDB e MyISAM
  • Os desenvolvedores usam muitas tabelas temporárias

Eu devo:

  • Não use as consultas inseguras
  • Peça aos desenvolvedores que coloquem todas as tabelas temporárias em um banco de dados separado

Mais alguma coisa? Em caso de dessincronização, é mk-table-syncconfiável o suficiente para ressincronizar automaticamente? Alguém usa na produção?


ATUALIZAÇÃO: terça-feira, 28 de fevereiro 23:27:13 ICT 2012

Meu banco de dados Escravo (~ 40 GB) está fora de sincronia com o Mestre. Não consigo encontrar nada interessante no log de erros.

Para obter mais informações sobre o que estava acontecendo, o Slave deve ser iniciado com --log-warnings=2.

mysql replication
  • 1 1 respostas
  • 2664 Views

1 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2011-12-24T09:11:28+08:002011-12-24T09:11:28+08:00

    OBSERVAÇÃO #1

    Você mencionou que os desenvolvedores do Ask colocam todas as tabelas temporárias em um banco de dados separado

    Se seus desenvolvedores estiverem usando comandos CREATE TEMPORARY TABLE para criar tabelas temporárias, eles precisarão usar CREATE TABLE. Aqui está o porquê:

    Com o MySQL Replication processando uma tabela temporária, é isso que ocorre

    • 1) Corrida principalCREATE TEMPORARY TABLE
    • 2) Comando inserido no log binário
    • 3) A replicação copia isso para os logs de retransmissão do escravo via I/O Thread
    • 4) Execuções de Thread SQL EscravoCREATE TEMPORARY TABLE
    • 5) Escravo processa dados com essa tabela temporária

    De vez em quando, alguém pode STOP SLAVE;executar um backup. Se STOP SLAVE;for emitido logo após a etapa 4, a temperatura criada desaparece e seus dados também. Quando você executa START SLAVE;quebras de replicação reclamando instantaneamente que a tabela não existe. Isso é normal porque quando uma conexão de banco de dados termina deliberadamente ou acidentalmente, todas as tabelas temporárias abertas CREATE TEMPORARY TABLEna sessão de banco de dados são descartadas. Executando STOP SLAVE;kill do thread SQL que estava segurando a abertura da tabela temporária.

    A única solução para isso é criar a tabela usando CREATE TABLEem vez de CREATE TEMPORARY TABLE. Quando executado STOP SLAVE;, a tabela temporária que você criou normalmente não desaparece.

    Eu vi isso acontecer talvez 10 vezes em minha carreira de DBA. Consertá-lo usando os logs binários para descobrir o nome das tabelas temporárias, para criar essas tabelas usando CREATE TABLE, então iniciar a replicação foi a única manutenção possível sem apenas força bruta copiando o mestre.

    OBSERVAÇÃO #2

    mk-table-syncsó funciona em tabelas com chaves primárias e/ou chaves únicas. Funciona talvez 99% do tempo. Já vi casos em que a soma de verificação de uma tabela no mestre e no escravo eram diferentes. Eu rodaria mk-table-sync, ainda havia diferenças (Claro, eu estava fazendo mk-table-syncem replicação circular com 3 masters, o que pode ser um pouco perigoso. Usar em Master/Slave é bem mais estável)

    OBSERVAÇÃO #3

    Você mencionou que existem algumas consultas inseguras. Ele apresenta alguns problemas com a replicação baseada em MIXED?

    Depende. A consulta insegura mais popular é qualquer UPDATE ou DELETE que usa ORDER BY ... LIMIT. Com o SBR, isso pode fazer com que o MySQL atualize ou exclua linhas de uma tabela no escravo em uma ordem diferente da do mestre. Com RBR, acredito que as mudanças exatas em uma linha são mais identificáveis ​​para UPDATE ou DELETE no Slave.

    SOLUÇÃO : Evite usar consultas inseguras. Então, você não vai se preocupar !!!

    OBSERVAÇÃO #4

    Acabei de ler seu segundo link. ROF!!! Estou familiarizado com o pôster da resposta.

    • 4

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 você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

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

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 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
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +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
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +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
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +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