Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como executar atualizações sem interrupção para MySQL

Há diferentes razões para atualizar seus bancos de dados. Pode ser aplicar correções de segurança, usar novos recursos, resolver problemas de compatibilidade ou apenas manter seu sistema atualizado. Essa atualização pode ser uma atualização principal ou secundária e, dependendo da tecnologia, existem diferentes abordagens para fazer esse trabalho, mas se você precisar que seus sistemas funcionem o tempo todo com tempo de inatividade zero, realizar uma atualização sem interrupção pode ser a melhor opção .

Neste blog, veremos algumas considerações a serem levadas em consideração antes de atualizar e como realizar uma atualização sem interrupção no MySQL.

Atualizações secundárias vs. principais

Em geral, atualizações menores são seguras na medida em que você pode facilmente fazer downgrade ou reverter e devem ser compatíveis com os pacotes e recursos anteriores.

A atualização de versão principal envolve alguns riscos, como remoção de pacote de banco de dados, compatibilidade de configuração e conectores, recursos obsoletos e muito mais.

Assim, mesmo quando o teste é importante para ambos os cenários, no caso de grandes atualizações, é imprescindível se você quiser evitar problemas sérios para o seu negócio.

Antes de atualizar

Agora, vamos ver algumas considerações antes de atualizar, para evitar problemas futuros.

Backups

Os backups são sempre importantes, e ainda mais se você deseja atualizar seu banco de dados. Se algo der errado e outras opções de recuperação de desastres falharem, você precisará de um backup para restaurar seu banco de dados. Portanto, antes de iniciar a tarefa, faça um backup completo (físico e/ou lógico) do seu banco de dados atual e mantenha-o seguro até ter certeza de que tudo está funcionando corretamente por alguns dias/semanas.

Revisar recursos obsoletos

Se você estiver usando um recurso obsoleto na nova versão, seu aplicativo poderá falhar e você precisará reverter para recuperar seus sistemas, o que gerará tempo de inatividade (depende da abordagem) e um perda de tempo. Verificar o recurso obsoleto e compará-lo com os que você está usando evitará essa tentativa de atualização com falha.

Teste

Isso é importante não apenas para atualizações, mas também para qualquer alteração em seu banco de dados ou aplicativo. Ter um ambiente de teste que replica o ambiente de produção pode economizar seu tempo e evitar problemas inesperados durante qualquer atualização ou alteração do banco de dados.

Reversão

Em qualquer atualização, é importante ter um rollback pronto para ser usado se necessário para ter seu banco de dados funcionando o mais rápido possível. Caso contrário, isso pode afetar seu RTO (objetivo de tempo de recuperação) caso você precise recriar o cluster de um backup ou de outra opção de plano de recuperação.

Lembre-se de que, às vezes, os downgrades não são possíveis, portanto, você deve ter um plano secundário caso precise reverter suas alterações.

Verificações de fornecedores

Dependendo do fornecedor e da versão, você pode usar o comando mysqlcheck para realizar a verificação preliminar em sua instalação atual e confirmar que está pronto para começar.

$ mysqlcheck -u root -p --all-databases --check-upgrade

Enter password:

mysql.columns_priv                                 OK

mysql.db                                           OK

mysql.engine_cost                                  OK

mysql.event                                        OK

mysql.func                                         OK

mysql.general_log                                  OK

mysql.gtid_executed                                OK

mysql.help_category                                OK

mysql.help_keyword                                 OK

mysql.help_relation                                OK

mysql.help_topic                                   OK

mysql.innodb_index_stats                           OK

mysql.innodb_table_stats                           OK

mysql.ndb_binlog_index                             OK

mysql.plugin                                       OK

mysql.proc                                         OK

mysql.procs_priv                                   OK

mysql.proxies_priv                                 OK

mysql.server_cost                                  OK

mysql.servers                                      OK

mysql.slave_master_info                            OK

mysql.slave_relay_log_info                         OK

mysql.slave_worker_info                            OK

mysql.slow_log                                     OK

mysql.tables_priv                                  OK

mysql.time_zone                                    OK

mysql.time_zone_leap_second                        OK

mysql.time_zone_name                               OK

mysql.time_zone_transition                         OK

mysql.time_zone_transition_type                    OK

mysql.user                                         OK

sys.sys_config                                     OK

Esta é a primeira verificação a ser executada antes da atualização e verificará se não há:

  • Tabelas que usam tipos de dados ou funções obsoletas
  • Arquivos frm órfãos
  • Triggers com definidor ausente ou vazio ou um contexto de criação inválido

Há mais algumas coisas que você precisa verificar, mas para evitar uma postagem extensa no blog, você pode consultar a documentação oficial do MySQL para isso.

Atualizações contínuas manuais para MySQL

Existem diferentes abordagens para realizar uma atualização sem interrupção. Pode estar no lugar, usando replicação ou até mesmo uma mistura deles. De qualquer forma, se você deseja evitar o tempo de inatividade, não deve realizar alterações em seu aplicativo durante a atualização. Para isso, você pode adicionar um Load Balancer na frente de seus bancos de dados. Seu aplicativo se conectará ao seu Load Balancer e redirecionará o tráfego para os nós disponíveis.

Digamos que você tenha uma Replicação MySQL com 1 nó mestre e 2 nós escravos e 1 nó HAProxy na frente deles:

Uma maneira simplificada de realizar uma atualização manual sem interrupção neste ambiente pode ser:

  • Desabilite um nó escravo do seu HAProxy
  • Certifique-se de que não haja tráfego neste nó escravo
  • Atualize o nó escravo manualmente
  • Verifique o status da replicação para certificar-se de que está atualizado
  • Desative o nó mestre em seu HAProxy
  • Certifique-se de que não haja tráfego em seu nó mestre
  • Promova o nó escravo atualizado
  • Ative-o em seu HAProxy
  • Confirme se o novo mestre está recebendo tráfego
  • Reconfigure seu segundo escravo para replicar do novo mestre
  • Desabilite o segundo escravo do seu HAProxy
  • Certifique-se de que não haja tráfego neste nó escravo
  • Atualize o nó escravo manualmente
  • Verifique o status da replicação para certificar-se de que está atualizado
  • Ative-o em seu HAProxy
  • Confirme se o nó escravo está recebendo tráfego (se necessário)
  • Reconfigure seu antigo mestre para replicar do novo mestre
  • Atualize o nó mestre antigo manualmente
  • Verifique o status da replicação para certificar-se de que está atualizado
  • Ative-o em seu HAProxy
  • Confirme se o antigo mestre (agora escravo) está recebendo tráfego (se necessário)

Como você pode ver, mesmo de forma simplificada, esta tarefa requer muitas etapas, e significa mais possibilidades de algo dar errado.

Atualizações contínuas do ClusterControl para MySQL

A melhor maneira de reduzir a possibilidade de falha é automatizar todas (ou quase todas) essas etapas. Usando o ClusterControl, você pode realizar uma pequena atualização sem interrupção do seu cluster MySQL com apenas alguns cliques.

Para fazer isso, vá para ClusterControl -> Select Cluster -> Manage -> Upgrades, onde você vê a opção Upgrade.

As atualizações estão online e são executadas em um nó por vez. O nó será interrompido, o software será atualizado e, em seguida, o nó será iniciado novamente. Se um nó não for atualizado, o processo será abortado.

Se você escolher a opção Upgrade, verá uma confirmação sobre a versão que será atualizada:

E você só precisa pressionar Upgrade para confirmar este trabalho. Depois disso, você pode monitorar o processo de atualização na Seção de Atividade do ClusterControl:

Ao mesmo tempo, o ClusterControl reconfigurará seus Load Balancers para enviar o tráfego para os nós disponíveis.

O ClusterControl suporta apenas atualizações secundárias, porque, como mencionamos anteriormente, uma atualização importante é uma tarefa arriscada que requer testes e pesquisas para garantir que seu aplicativo funcione bem na nova versão principal.

Conclusão

A atualização é uma tarefa importante em todas as empresas e pode ser arriscada se você não tomar certas precauções e seguir todas as etapas de atualização corretamente.

Neste blog, mencionamos algumas considerações a serem consideradas antes de atualizar seu banco de dados e mostramos a diferença entre fazer essa tarefa manualmente e usar o ClusterControl, que ajuda a minimizar a possibilidade de falha.