Como o banco de dados de código aberto mais popular, o MySQL foi implementado em muitos lugares, desde pequenas startups até organizações muito grandes. Os casos de uso variam de aplicativos de site simples a ambientes de missão crítica com requisitos de tempo de atividade de 99,999%. O MySQL apenas faz o trabalho e é fácil de trabalhar.
Embora o MySQL seja relativamente fácil de gerenciar, ele não roda sozinho. Há uma certa sobrecarga de gerenciamento - o software precisa ser corrigido de vez em quando, o banco de dados precisa ser monitorado quanto a falhas ou anomalias no desempenho ou segurança, as falhas precisam ser tratadas e recuperadas, os backups precisam ser gerenciados. a lista continua... Portanto, não deve ser surpresa que os maiores fornecedores de nuvem ofereçam serviços públicos de DBaaS baseados em MySQL.
Três provedores de nuvem que oferecem MySQL como um serviço incluem:
- Amazon Web Service com RDS para MySQL
- Google Compute Engine com CloudSQL para MySQL
- Microsoft Azure, Microsoft Azure MySQL
Neste blog, vamos comparar as soluções desses provedores de nuvem.
Versão e patches do MySQL
A versão mais recente do MySQL que está disponível no Amazon Web Services (AWS) é o MySQL 8.0.20, que é bastante próximo da versão mais recente do Oracle MySQL oficial ( 8.0.21 no momento da escrita). Além da versão mais recente, o AWS RDS também fornece a versão mais antiga do MySQL (versão principal 5.5, 5.6 e 5.7), para que você possa implantar a versão exata compatível com seu aplicativo.
No Google Cloud Platform (GCP), a versão do MySQL compatível com o CloudSQL para MySQL ainda é MySQL 5.6 e 5.7, a versão secundária mais recente da versão 5.6 é 5.6.42, enquanto para a versão 5.7, a mais recente versão secundária é 5.7.25.
O banco de dados do Azure para MySQL oferece suporte às versões 5.6, 5.7, 8.0, infelizmente eles não fornecem a versão secundária (ou a versão de correção de bug do banco de dados, como o Azure o chama) ao implantar a partir do console. Para determinar a versão de sua instância do servidor MySQL, pode-se usar o comando SELECT VERSION(); comando no prompt do MySQL.
Problemas e limitações conhecidos
Existem alguns problemas e restrições conhecidos que existem no banco de dados como um serviço enquanto isso não acontece no MySQL local ou nas VMs. No RDS, algumas das limitações são:
- O plug-in de chaveiro MySQL não é compatível.
- O tamanho máximo do limite de armazenamento para uma tabela é 16 TB ao usar o mecanismo de armazenamento InnoDB.
- Existem alguns parâmetros que exigem considerações especiais ao usar o RDS, por exemplo:long_query_time, lower_case_table_name.
Existem algumas limitações e problemas conhecidos no CloudSQL para MySQL, divididos em diferentes categorias, por exemplo:problemas de durabilidade e disponibilidade de dados, problemas de conexão de instância, problemas administrativos e problemas com exportação e importação de dados. Cada categoria tem problemas e limitações específicas, algumas delas são:
- As operações de longa duração não podem ser canceladas ou interrompidas.
- Os nomes das instâncias não podem ser usados imediatamente após a exclusão da instância.
- A cláusula DEFINER fará com que a importação falhe.
O banco de dados do Azure para MySQL tem algumas limitações e problemas conhecidos relacionados à atualização, privilégios e mecanismo de armazenamento. Alguns dos detalhes são:
- A atualização principal do banco de dados não é suportada no momento. Você precisa fazer um dump e restaurar em um novo servidor para uma atualização importante.
- O banco de dados do Azure para MySQL atualmente oferece suporte a InnoDB e mecanismos de armazenamento de memória.
- O banco de dados do sistema no banco de dados do Azure para MySQL está definido como somente leitura. Você não pode alterar nada no banco de dados do sistema mysql.
Você precisa verificar as limitações e problemas conhecidos do MySQL em cada provedor de nuvem e comparar com seus requisitos para entender se isso afeta o aplicativo.
Backup e restauração
O Amazon RDS for MySQL executa o backup automatizado conforme a programação, tira um instantâneo do volume da instância do banco de dados. O padrão do período de retenção de backup é de 7 dias. Além disso, o RDS carrega seus logs de transações para instâncias de banco de dados para o S3 a cada 5 minutos para manter a recuperação pontual.
Você pode restaurar um backup para um momento específico criando uma nova instância dentro do período de retenção do backup. Você pode escolher a última hora de restauração para a última hora possível ou pode escolher um personalizado para definir uma hora específica para restaurar os dados.
O backup que ocorre no CloudSQL para MySQL é incremental. Ele contém apenas as alterações de dados após o backup anterior. O backup mais antigo é semelhante ao tamanho do banco de dados atual. Quando o backup mais antigo é removido, o tamanho do backup mais antigo a seguir aumenta, de modo que o backup completo ainda existe.
O backup automatizado ocorre todos os dias e é retido por 7 dias por padrão. O CloudSQL armazena dados de backup em 2 regiões para redundância. Uma região pode estar na mesma que a instância está em execução e a outra está em uma região diferente.
A recuperação pontual no CloudSQL criará uma nova instância, a configuração da instância herdará com a origem da instância. Antes de fazer a recuperação pontual, verifique se você já ativou o log binário. Ao executar a recuperação pontual, você só precisa preencher o nome do log binário e a posição de recuperação.
O banco de dados do Azure para MySQL faz backup de arquivos de dados e logs de transações. O agendamento de backup em si é uma combinação de backup completo e diferencial para servidores com tamanho de armazenamento de até 4 TB, enquanto o backup de instantâneo ocorre para servidores de armazenamento máximo de até 16 TB.
O backup completo é executado uma vez por semana, enquanto os backups diferenciais ocorrem duas vezes por dia. O período de retenção padrão do backup é de 7 dias, mas você sempre pode configurar a retenção para até 35 dias.
Existem dois tipos de restauração no banco de dados do Azure para MySQL, que são:
- Restauração pontual, disponível como opção de backup de redundância, ou você pode criar um novo servidor na mesma região do servidor original, utilizando o backup completo e o log de transações para restaurar os dados.
- Restauração geográfica, disponível se você configurar uma redundância geográfica na opção de armazenamento. Ele permitirá que você restaure seu backup para diferentes regiões.
Observe que nem AWS, Google ou Azure permitem que você baixe seus backups.
Monitoramento de banco de dados
O RDS fornece integração de monitoramento com o CloudWatch, você pode ver algumas das métricas, como utilização de CPU, conexões de banco de dados, IOPS de gravação e leitura de IOPS, taxa de transferência de gravação e taxa de transferência de leitura, latência de gravação e leitura. Você pode criar um alarme para acionar o alerta do CloudWatch, com base em alguma categoria de métricas e apenas definir o limite.
Semelhante ao RDS, o GCP CloudSQL também se integra ao stackdriver, você pode ver métricas como:utilização da CPU, utilização da memória, conexões ativas, transações/s, bytes de entrada/saída, operações de gravação e leitura, atraso de replicação .
O banco de dados do Azure para MySQL fornece algumas métricas, por exemplo; Conexões ativas, porcentagem de CPU, conexão com falha, porcentagem de E/S, porcentagem de memória, atraso de replicação, porcentagem de armazenamento, armazenamento usado. Você também pode criar alertas em bancos de dados do Azure para MySQL, escolher as métricas e definir as regras.
Conclusão
Baseado em 4 áreas principais; Versão e patches do MySQL, problemas e limitações conhecidos, backup e restauração, monitoramento de banco de dados, na minha opinião o Amazon RDS for MySQL ainda é o melhor banco de dados como serviço para MySQL. Ele fornece versões e patches detalhados, problemas e limitações muito limitados em comparação com outros. É uma maneira conveniente de executar o MySQL, com a ressalva de que o preço do serviço subiu nos últimos anos.