Maneira ideal de fazer backups do MySQL para bancos de dados bastante grandes (MyISAM / InnoDB)

8

Atualmente, temos um banco de dados MySQL robusto que executa alguns sites baseados em Django com alto tráfego, bem como alguns sites de comércio eletrônico de tamanho decente. Como resultado, temos uma grande quantidade de grandes bancos de dados usando as tabelas InnoDB e MyISAM.

Infelizmente, recentemente atingimos um limite devido à quantidade de tráfego, por isso configurei outro servidor mestre para ajudar a aliviar as leituras / backups.

Agora, no momento, eu simplesmente uso o mysqldump com alguns argumentos e está provado que está bem .. até agora. Obviamente, o mysqldump é um método lento e rápido, no entanto, acredito que superamos seu uso. Agora, preciso de uma boa alternativa e tenho estudado a utilização do utilitário Maatkits mk-parallel-dump ou de uma solução de instantâneo LVM.

Versão curta e sucinta:

  • Eu tenho um banco de dados MySQL bastante grande, preciso fazer backup
  • O método atual usando o mysqldump é ineficiente e lento (causando problemas)
  • Examinando algo como snapshots mk-parallel-dump ou LVM

Quaisquer recomendações ou idéias serão apreciadas - desde que eu tenha que refazer a maneira como estamos fazendo as coisas, prefiro fazê-las adequadamente / com mais eficiência :).

WinkyWolly
fonte

Respostas:

5

Eu tive um bom sucesso com a replicação do MySQL e tarballs noturnos. Para bancos de dados menores, o banco de dados mysql e o esquema eu uso uma combinação de scripts projetados para usar mysqlhotcopy e mysqldump.

O hot backup do InnoDB é um ótimo produto comercial, mas não sei como ele lida com tabelas mistas no mesmo banco de dados. A recomendação do pQd para o XtraBackup pode ser boa para comparar com isso.

Outros gostam de instantâneos do LVM e eu diria que é definitivamente algo a considerar. Por fim, uma combinação de soluções provavelmente seria a melhor.

Também é notável que este é um tópico antigo. Entre o livro MySQL de alto desempenho , o manual do MySQL e as perguntas anteriores sobre ServerFault - isso foi esgotado em uma base geral. Vejo:

Warner
fonte
+1; com o myisam, você nunca sabe se possui um backup logicamente consistente [feito pelo lvm / mysqldump / from lave] ou não. talvez se o aplicativo for alterado apenas durante o horário comercial - você pode despejá-lo com segurança à noite, caso contrário - nunca terá certeza e nenhum método ajudará.
pQd
Eu acho que você está certo sobre misturar soluções. Como mencionado na resposta do pQd, provavelmente pegarei os instantâneos do LVM e analisarei o utilitário xtrabackup (diz que ele pode lidar com tabelas mistas). Eu olhei para o hot backup do InnoDB, no entanto, eu sempre gosto de projetos de código aberto. Obrigado pelas referências, procurei em 2 delas, mas as respostas são bastante genéricas / não abordam os problemas que estou tendo / estão se referindo a bancos de dados mais "normais" e "mundanos".
WinkyWolly
4

xtrabackup - pelo menos para innodb.

pQd
fonte
Interessante, no entanto, eu gostaria que uma solução mais elegante não se preocupasse com minha combinação de tabelas InnoDB / MyISAM.
WinkyWolly
xtrabackup vem com script que pode ajuda-o com a tomada de backups de myisams também, mas verificar o meu comentário sob o post de Warner
PQD
Obrigado, parece que eu poderia ir nessa direção e misturar instantâneos do LVM para uma boa medida. Ele afirma que também pode "manipular" tabelas MyISAM através do script "innobackupex". Suponho que vou dar uma olhada e ver exatamente o que acontece.
WinkyWolly
3

A maneira mais comum de resolver esse problema é configurar outro servidor MySQL, que pode até estar na mesma máquina, e executar a replicação mestre / escravo. Você pode executar o backup no escravo, sem impacto no mestre.

John Gardeniers
fonte
0

No EC2 EBS, agora estou usando xfs_freeze. Estou pensando em mudar para o xtrabackup em algum momento, mas quando fiz o primeiro teste, ele estava com muita, muita fome de CPU.

user5336
fonte
Infelizmente, agora só uso o XFS em servidores de mídia, então isso não é uma opção. Que tipo de experiência (além da falta de CPU, talvez mais detalhes?) Você teve com o xtrabackup? Você estava fazendo backup de tabelas puras do InnoDB ou de um mix?
WinkyWolly
Minha maior hesitação foi que ele consumiu a CPU por cerca de 30 minutos quando foi concluído (fazendo backup de um banco de dados com cerca de 35 GB), tornando o servidor de banco de dados apenas marginalmente funcional - certamente não algo que eu provavelmente executaria em um mestre de produção . Na verdade, eu já havia convertido minhas poucas tabelas MyISAM restantes para o InnoDB parcialmente para os fins disso. Eu acho que provavelmente seria bom rodar em um escravo, desde que isso não faça com que a replicação fique substancialmente para trás.
User5336
0

Se você estiver executando a replicação de um banco de dados compartilhado entre aplicativos, parece haver uma pergunta óbvia sobre se você pode melhorar o desempenho de várias coisas, incluindo backups, dedicando servidores de banco de dados a aplicativos. Compartilhado é legal, até que não seja.

Justin Alan Ryan
fonte
0

Se você estiver mantendo suas tabelas MyISAM apenas por motivos herdados (você não se incomodou em alterá-las), eis o que eu uso para corrigir isso facilmente:

    mysql -u root --password=<password> --database=db_name -B -N -e "SHOW TABLES" | awk '!/not_this_db/ && !/or_this_one/ && /^[a-z]/ {print "ALTER TABLE", $1, "ENGINE=INNODB;"}' | mysql -u root --password=<password> --database=db_name

Você pode excluir e incluir bancos de dados com o regex awk, como apenas dbs, começando com uma letra minúscula no meu exemplo acima. Obviamente, isso trancará as tabelas durante o alter.

Em seguida, use xtrabackup para copiar todo o banco de dados diretamente para outro servidor sem bloquear nenhuma tabela ou usar muito IO de disco (depois de configurar as chaves ssh rsa):

innobackupex --throttle=500 --compress --stream=xbstream /doesntneedtoexist | ssh user@otherhost "xbstream -x -C /root/backup/"

e, em seguida, você pode executar a etapa de log de aplicação completamente separada e economizar espaço em disco, E / S e CPU no servidor de produção.

HowTO da Percona para usar o xtrabackup

Brad
fonte