Backup de um banco de dados MySQL - enquanto ainda está em uso

5

Eu atualmente backup meu banco de dados MySQL usando mysqldump, por exemplo:

mysqldump --user USERX --password=PWDX DBNAMEX > dbbackup__'date '+%m-%d-%Y''.sql

Quando executo o backup (iniciado por meio de uma tarefa cron), defino uma regra .htaccess em meu site para redirecionar todas as solicitações para uma página estática "para backup, voltar rapidamente". Quando o backup for concluído, removerei a regra e o site será reaberto.

Tudo bem e bom, tem sido assim há anos e como você pode imaginar isso funciona perfeitamente e eu não tive nenhum problema.

No entanto ...

Eu gostaria de não ter que fechar o site durante o backup, então a questão é: posso fazer isso com o mysqldump? A ferramenta é capaz de lidar com condições em que os dados são alterados após o início do backup? Se ele fizer backups ao vivo, posso garantir que não receberei um backup corrompido? Existe uma maneira melhor de fazer um backup ao vivo?

    
por MrEyes 20.01.2011 / 16:42

4 respostas

3
  • Se você usa o InnoDB, pode ler e escrever simultaneamente. Você provavelmente quer usar o InnoDB se ainda não estiver.
  • O uso do InnoDB permite executar um backup com o sinalizador --single-transaction. Isso manterá o banco de dados em um estado consistente e fará o dump ao vivo, permitindo que outras transações sejam processadas.
  • Se você tem um banco de dados suficientemente grande (parece que você pode passar sem isso), então você precisa de algo mais. Existe uma solução de backup hot InnoDB oficial paga, mas eu evito essa idéia. Se você está precisando disso, veja o link
por 20.01.2011 / 16:48
1

Tente dar uma olhada no mysqlhotcopy - dependendo do tamanho do seu banco de dados / tabelas, etc., isso pode lhe dar a resposta.

    
por 20.01.2011 / 16:44
1

Se o seu mecanismo de armazenamento for InnoDB, você poderá obter um mysqldump consistente de um banco de dados ativo usando o sinalizador --single-transaction (desde que não altere as estruturas da tabela durante o backup). Mas isso não funciona com o MyISAM.

    
por 20.01.2011 / 16:49
0

Use a opção --single-transaction para bancos de dados InnoDB ou --lock-tables para MyISAM.

    
por 20.01.2011 / 17:28

Tags