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 / 129827
Accepted
Sнаđошƒаӽ
Sнаđошƒаӽ
Asked: 2016-02-20 08:02:02 +0800 CST2016-02-20 08:02:02 +0800 CST 2016-02-20 08:02:02 +0800 CST

Tolerância a falhas em servidores mysql

  • 772

Eu construí um aplicativo como parte de minha tese de UG que usa banco de dados mysql (edição da comunidade). Agora, meu professor quer que eu forneça tolerância a falhas ao banco de dados (por paridade!!)! Argumentei que não precisaríamos disso. De qualquer forma, pesquisei e descobri aqui que o mysql possui um mecanismo de replicação embutido (um mecanismo para fornecer tolerância a falhas, certo?), Junto com muitas outras técnicas para fornecer confiabilidade. Mas o que aprendi com isso é que existe um servidor mestre e alguns servidores escravos para fornecer tolerância a falhas usando replicação. Agora minhas perguntas são:

  • E se eu tiver apenas um servidor de banco de dados? O mysql tem alguma tolerância a falhas para servidores de banco de dados autônomos únicos (ou seja, sem formação mestre-escravo, sem cluster , etc.)?

  • Preciso tentar fornecer qualquer tipo de tolerância a falhas para os dados armazenados no banco de dados mysql?

  • Que tipo de diferenças existem (apenas em termos de tolerância a falhas) entre a edição da comunidade e a edição corporativa dos servidores mysql?

De alguma forma, tenho a sensação de que não precisamos fazer nada para fornecer tolerância a falhas ao banco de dados mysql, e está bem por si só. Mas preciso de algumas informações sólidas sobre o assunto.


Edição de recompensa:

A segunda pergunta de cima novamente:

  • Preciso tentar fornecer qualquer tipo de tolerância a falhas para os dados armazenados no banco de dados mysql?

  • Qual é a sensatez de tentar fornecer tolerância a falhas para um banco de dados mysql usando paridade (bit por byte)?

Alguns detalhes sobre os dados no banco de dados:

Os dados a serem específicos são uma coleção de cerca de 6500 strings Unicode, com menos de 1 MB de tamanho, são dados de inicialização , que nunca mudarão com o tempo. A única transação será para ler os dados do banco de dados, sem atualização e sem exclusão. Meu aplicativo requer pesquisa de texto completo nessas strings, e esse é o único motivo pelo qual estou usando o mysql, pois ele fornece pesquisa de texto completo. Estou ciente de que poderia evitar a pesquisa FT do mysql usando algo como elasticsearch.

mysql replication
  • 3 3 respostas
  • 1510 Views

3 respostas

  • Voted
  1. Rick James
    2016-02-20T17:27:59+08:002016-02-20T17:27:59+08:00
    • O que é provável que quebre?
    • Quão avesso ao risco você é?
    • Você precisa reparar a falha ou apenas descobri -la?

    Uma verificação de "paridade" só pode descobrir falhas, portanto, não é tolerante a falhas.

    Muitas pessoas decidem que o principal ponto de falha é o subsistema de disco, então usam o RAID. Nesse contexto, você pode supor que a paridade pode ser usada para reparar - mas apenas porque existe algum outro mecanismo para dizer "esta unidade falhou".

    Mas e se a placa-mãe morrer?

    Portanto, você usa replicação e mestre-escravo com os dois servidores próximos um do outro.

    Mas e se a energia do prédio acabar? Ou um tornado atinge os dois servidores? Ou ...

    Então você coloca o Slave em outro data center.

    (Eu poderia continuar essa história boba, mas não vou.)

    Você pode colocar duas "instâncias" do MySQL no mesmo servidor e, em seguida, replicar uma para a outra. Em seguida, dê uma boa olhada em quão grande é a sua solução. (Não importa que praticamente qualquer falha destrua ambas as cópias.)

    Ou você pode gastar alguns dólares e alugar espaço na Amazon para outro servidor. Então você pode se gabar honestamente da "tolerância a falhas".

    Depois da Edição da Recompensa

    Usar Mecanismo=InnoDB; isso oferece uma recuperação mais simples da falha do servidor.

    Depois de carregar os dados, faça um dump ( mysqldumpou outro) da tabela estática e armazene-o em outro lugar. Isso é para "recuperação de desastres" de inundações, meteoritos, falhas de software, falha de disco, etc. O recarregamento seria manual e levaria algum tempo (mas você não colocou limites nisso).

    Essas são medidas simples e efetivamente cobrem praticamente todos os desastres. Se eu fosse listar outras coisas que podem dar errado com uma configuração do mysql, "paridade" não aparece como parte de nenhuma solução.

    Para terminar a tarefa que você tem, configure seu disco com RAID-5. Três unidades é o mínimo. Você provavelmente poderia fingir com invasão de software e partições de uma única unidade. No entanto, isso tornaria inútil a recuperação de qualquer tipo de falha; em vez disso, mostraria o uso de "paridade".

    "Checksums" são usados ​​com mais frequência para detectar (mas não corrigir) erros. Isso geralmente é uma sobrecarga de 4 a 8 bytes para bytes de dados de 512 a 16 KB. Isso não é, tecnicamente, "paridade", mas é mais eficiente.

    Um bit de paridade por byte oferece detecção de erro , mas não correção de erro . Veja SECDEDpara correção. Isso requer, por exemplo, 8 bits em uma 'palavra' de 64 bits. Seymour Cray disse que "a paridade é para os agricultores", mas eventualmente ele implementou o SECDED nas memórias 'centrais'. (Isso foi nos anos 70. Seu professor é tão antigo assim?)

    • 4
  2. Best Answer
    Michael Green
    2016-04-12T18:58:20+08:002016-04-12T18:58:20+08:00

    O DBMS pode ser deixado para lidar com a detecção e recuperação de falhas (quando configurado corretamente). Seria muito incomum implementar manualmente tal comportamento no aplicativo. De fato, é para isso que serve uma pilha de software - para remover dos aplicativos os recursos que são comuns e frequentemente necessários, da mesma forma que um sistema operacional cuida do gerenciamento de memória e do agendamento de threads, digamos.

    Dito isso, você pode adicionar outra coluna a cada tabela que contém as cadeias de caracteres. Ele manterá um hash da string. Recupere o hash junto com a string, recalcule e gere um erro se os dois hashes forem diferentes.

    Dado que se trata de uma tese universitária, o professor pode estar tentando transmitir um ponto de aprendizado, além de qualquer praticidade sobre a implementação. Seu benefício de longo prazo pode ser investigar possíveis implementações de sua sugestão, em vez de listar os motivos pelos quais ele é um idiota. Apenas dizendo'.

    • 4
  3. jynus
    2016-02-20T09:20:15+08:002016-02-20T09:20:15+08:00

    Há várias coisas aqui. Se você deseja garantir a integridade dos dados, pode usar um mecanismo com tal coisa integrada. O mecanismo padrão do MySQL, InnoDB, calcula uma soma de verificação de cada página (geralmente, 16K de dados) e se desligará automaticamente se a soma de verificação falhar (na maioria dos casos, devido a um problema de hardware; mas pode ser um bug em si ou alguém adulteração manual dos arquivos).

    Além disso, em caso de falha, o InnoDB usa um log de transações para recuperar transações perdidas que podem não estar totalmente sincronizadas com o disco devido ao buffer de memória.

    As somas de verificação garantem a consistência física dos dados, mas não permitem recuperá-los; e eles não evitam outros problemas, como incorreção lógica ou exclusão acidental.

    Uma configuração de replicação permite redundância de serviço (e até geograficamente redundante) e certa redundância de dados contra perda de dados devido a hardware. No entanto, como a replicação ocorre quase em tempo real, ela não protege contra coisas como a exclusão acidental do usuário. Além disso, embora a replicação tenha, nas versões mais recentes, soma de verificação dos dados na rede, isso raramente é um problema. No entanto, há um problema relativamente comum com um escravo mysql - erros de replicação podem surgir devido a consultas inseguras/não determinísticas (aquelas que podem retornar resultados diferentes em dois servidores diferentes), configuração diferente ou operações potencialmente arriscadas, como filtragem inadequada. Existem ferramentas de terceiros como pt-table-checksumque permite comparar duas réplicas enquanto os dados estão sendo gravados (e também fornecer somas de verificação no nível do usuário).

    Embora algo como um escravo atrasado possa ser útil para evitar esses problemas, a maneira mais comum de garantir a capacidade de sobrevivência dos dados é realizar backups regulares . Em particular, backups completos e logs binários permitem recuperação pontual e você pode adicionar somas de verificação para verificar se os dados não estão corrompidos durante o armazenamento. Os backups lógicos são mais lentos do que os backups de linha para grandes conjuntos de dados, mas são mais seguros se a integridade física for algo que se deseja evitar.

    Respondendo diretamente às suas perguntas:

    • Com as somas de verificação do InnnoDB e seu log de transações, é muito difícil haver corrupção de dados. A redundância de dados também pode ser obtida no nível do sistema de arquivos usando vários discos em uma configuração RAID (permitindo desempenho extra e/ou segurança de dados por espelhamento ou manutenção de paridades de dados)
    • Use backups para fornecer redundância de dados, replicação para fornecer redundância de serviço
    • Nenhuma diferença nos recursos de replicação entre a comunidade e a empresa, exceto o suporte pago e alguns utilitários que podem ser úteis
    • 3

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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
    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

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