Eu descobri recentemente que nossos servidores web de produção que executam o MySQL não estão sendo copiados regularmente (ou de forma alguma). Estou acostumado a fazer backup de bancos de dados SQL Server, mas não tenho muita experiência com bancos de dados MySQL. Alguma prática recomendada para usar 'mysqldump' ou qualquer outra ferramenta de backup de banco de dados?
Provavelmente vou fazer o cron job do cronograma para que seja feito todas as noites e depois fazer backup dos arquivos com meu sistema de backup.
Obrigado.
Práticas recomendadas para fazer backup do servidor MySQL:
Replicação do MySQL
Configurar replicação no MySQL. Você terá que configurar o servidor Master e Slave. Todas as leituras e gravações no banco de dados podem ir para o seu servidor escravo. A vantagem de ter Replication é que você pode fazer um backup do seu servidor slave sem interromper o servidor Master. Seu aplicativo continuará funcionando no Master sem qualquer tempo de inatividade.
Usando o despejo do MySQL
Se o seu conjunto de dados for pequeno (eu percebo que "pequeno" é um termo relativo... para qualificá-lo, digamos <10 GB), então mysqldump provavelmente funcionará muito bem. É fácil, está online e é muito flexível. Apenas algumas coisas que o mysqldump pode fazer: fazer backup de tudo ou apenas de alguns bancos de dados ou tabelas fazer backup apenas do DDL otimizar o dump para uma restauração mais rápida tornar o arquivo sql resultante mais compatível com outros RDBMSes e muito mais.
No entanto, as opções mais importantes estão relacionadas à consistência do seu backup. Minhas opções favoritas são: --single-transaction : esta opção fornece um backup consistente, se (e somente se) as tabelas estiverem usando o mecanismo de armazenamento InnoDB. Se você tiver tabelas MyISAM não somente leitura, não use esta opção ao fazer backup delas. --master-data=2 : esta opção garantirá que seu dump seja consistente (fazendo um lock-all-tables, a menos que você tenha adicionado a opção --single-transaction). A opção --master-data também registra a posição do log binário no arquivo de despejo resultante (=2 faz com que esta linha seja um comentário no arquivo de despejo)
Nota final sobre mysqldump: tenha em mente que o tempo de restauração pode ser significativamente maior que o tempo de backup. Vai depender de vários fatores, por exemplo, quantos índices você tem.
Instantâneo do LVM
Para aqueles que possuem conjuntos de dados maiores, um backup físico é o caminho a seguir. Embora você possa fazer um backup a frio (ou seja, encerrar o serviço MySQL, copiar o diretório de dados, reiniciar o serviço), muitas pessoas não querem tempo de inatividade. Minha solução favorita é instantâneos. Isso pode ser quente (para InnoDB) ou exigir um breve bloqueio (para MyISAM). Não se esqueça de incluir todos os seus dados (incluindo os ib_logfiles). Lenz fornece um bom utilitário para ajudar com isso: http://www.lenzg.net/mylvmbackup/
Usando o MySQL Enterprise Backup
Vantagens de usar o MySQL Enterprise Backup:
Referência: http://www.mysql.com/products/enterprise/backup/features.html http://www.mysql.com/products/enterprise/backup.html
Eu recomendaria configurar uma réplica dedicada para usar como backup. Isso permitirá que você execute qualquer tarefa de backup sem afetar o primário. Como isso adiciona complexidade à sua arquitetura, convém monitorar o atraso de replicação para garantir que tudo esteja funcionando.
Quanto ao processo real, você tem algumas opções sem ferramentas de terceiros. Os instantâneos podem ser feitos usando o
mysqldump
comando (supondo que você esteja usando o InnoDB):mysqldump --all-databases --single-transaction > all_databases.sql
. Dependendo do tamanho dos dados, pode ser preferível desligar o MySQL e fazer backup dos arquivos de dados diretamente. Quando a réplica for reiniciada, ela reproduzirá todos os eventos que o primário recebeu durante o período em que esteve inativo. Se você estiver usando o MySQL Enterprise, omysqlbackup
utilitário faz isso.Backups incrementais podem ser feitos habilitando o log binário na réplica. Obviamente, isso registra apenas eventos que alteram dados, portanto, você precisará combinar isso com os instantâneos acima.
Práticas universais que são aplicadas a todos os DBMS, incluindo MySQL
GFS (Grandfather-Father-Son) é uma estratégia de backup e armazenamento baseada em ciclos em que os backups são feitos diariamente, semanalmente e mensalmente (ou em uma programação semelhante). Essa política de retenção de backup permite encontrar um equilíbrio saudável entre a capacidade de recuperação de dados e os custos gastos na infraestrutura de backup.
Compressão. Os backups são bem compactados. Considere usar 7zip . Este utilitário permite ajustar os recursos consumidos (número de threads, número de processadores ou algoritmo de compactação).
Criptografia. Se o seu backup estiver criptografado, se seu armazenamento estiver comprometido, um hacker não terá acesso aos seus dados.
Automação. Os backups devem ser automatizados e os scripts de automação devem enviar notificações se os backups forem bem-sucedidos ou falharem.
Teste. É muito importante reproduzir periodicamente casos de emergência em um ambiente de teste e testar a recuperação de backups.
Terceirização de backup. É possível realizar um backup perfeito por conta própria, mas pode levar muitas horas tanto para escrever scripts quanto para manter esses scripts. Você não precisa fazer tudo sozinho. Existem muitos serviços pagos que cuidam dos backups.
Boas práticas específicas para MySQL
Escolha um método como os backups serão criados
mysqldump
cria um backup lógico.sql
em formato. Este é um utilitário padrão que é instalado junto com o MySQL Server. Essa ferramenta é boa para bancos de dados pequenos. Ele suporta Windows e Linux.mysqlbackup cria um backup de banco de dados físico . Este utilitário está incluído no pacote MySQL Enterprise Edition. Através da
mysqlbackup
ferramenta, os backups são executados mais rapidamente do que viamysqldump
. Esses backups só podem ser restaurados para a mesma versão do MySQL Server que o banco de dados original. É adequado para aqueles que já adquiriram o MySQL Enterprise Edition. Ele suporta Windows e Linux.O XtraBackup cria um backup físico . Os backups criados via XtraBackup são muito parecidos com os criados via mysqlbackup. Desenvolvido pela Percona e distribuído gratuitamente. Uma comparação de utilitários pode ser vista aqui . O Percona XtraBackup é bom para grandes bancos de dados. Ele suporta apenas Linux, mas com algum esforço também pode ser executado no Windows via docker ( link ).
Faça backups incrementais
Os backups incrementais permitem aumentar significativamente o número de pontos de restauração.
Se você realizar backups via
mysqldump
, é recomendável fazer backup de logs binários também. Existem instruções separadas para Windows e Linux .mysqlbackup suporta backups incrementais. link
O XtraBackup também suporta backups incrementais. link
Os backups incrementais combinam bem com a estratégia de backup GFS. Backups completos podem ser feitos semanalmente e mensalmente, enquanto backups incrementais são feitos diariamente.
Considere as características de um motor:
InnoDB é o mecanismo padrão para MySQL. Graças ao bloqueio em nível de linha, controle de versão de linha e suporte a transações, esse é um mecanismo ideal também para backups.
No entanto, se você usar tabelas com mecanismos alternativos, saiba como eles funcionam durante os backups. Talvez por consistência, o modo somente leitura deva ser ativado enquanto um backup está sendo executado.
Algumas palavras sobre replicação
Existem dois tipos de problemas que podem ocorrer com um banco de dados:
A replicação protege apenas contra o primeiro problema. Se dados importantes forem excluídos, isso se espalhará imediatamente para a réplica.
O backup protege contra ambos os cenários de falha.
O melhor é fazer um backup da réplica, assim você vai descarregar o servidor principal.