Eu passei horas construindo um novo servidor de banco de dados para substituir dois servidores com falha de um arquivo mysqldump
criado há um mês e, em seguida, usei bin-logs do meu servidor para atualizar o mysqldump
. Agora que tenho esse novo servidor de banco de dados on-line e o executei por alguns dias, preciso concluir a configuração do servidor e reimplementar uma estratégia de backup.
Eu preciso trazer (pelo menos) um MySQL Replication Slave online para o novo servidor, bem como começar a criar backups utilizáveis para quando as coisas falharem novamente.
Antes de prosseguir:
- Esqueci (eep) para ativar o bin-log no novo servidor MySQL antes de importar o backup lógico antigo e executar os logs bin velhos (acho que estou acordado por 24 horas nesse ponto, eu acho).
- Meus dados consistem em vários bancos de dados, todos com uma combinação de tabelas MyISAM e tabelas InnoDB.
- Além disso, seguindo as mesmas linhas de ativação dos registros bin no novo servidor, esqueci de ativar a opção
innodb-file-per-table
no my.cnf
antes de importar todos os dados. O log binário agora está habilitado no novo servidor MySQL, mas a opção inno por tabela é praticamente uma correção, até que eu possa importar outro backup lógico (provavelmente acabarei trazendo um segundo escravo e promovendo o primeiro escravo). para dominar e abandonar o mestre atual - como a configuração não é apenas onde eu preciso que seja).
Então, o problema:
Eu preciso fazer um backup do servidor MySQL, mas não consigo colocar o novo servidor MySQL offline. Preciso continuar fazendo gravações e servindo leituras com pouco ou nenhum tempo de inatividade. Esse requisito de "pouco ou nenhum tempo de inatividade" é definido como menos de 10 minutos. Meus dados atualmente usam cerca de 100 GB de espaço no servidor (arquivos de dados mysql), e os backups lógicos são de cerca de 50 GB (isso é um monte de índices ... haha). Eu não me importo com este backup é lógico, ou uma cópia dos arquivos de dados do diretório de dados do MySQL. Eu posso criar um backup lógico do escravo depois que eu o colocar on-line.
E a pergunta:
Como você criaria esse backup necessário? Eu sei que não é fácil, muitas pessoas dirão que não é possível. Mas eu me recuso a acreditar que não é possível, tem que haver uma maneira de fazê-lo.
Uma nota sobre o servidor: Ele está rodando o Ubuntu 10.04, o MySQL 5.1.41, e o sistema de arquivos no qual os dados estão armazenados é o ext3. O servidor está rodando no Rackspace Cloud, então o sistema de arquivos praticamente "é o que é" a menos que eu possa reparticionar o dispositivo raiz e reparticioná-lo com outro FS (talvez o XFS?) Para fazer um snapshot.
Eu li sobre Ferramenta Perconas XtraBackup mas ele só funciona para tabelas InnoDB. Eles têm uma ferramenta MyISAM, mas eu realmente não entendo como isso poderia funcionar (ou mesmo se isso acontecer) em conjunto com o XtraBackup para criar um backup completamente consistente.
Eu li sobre mysqlhotcopy
mas ele só funciona com tabelas MyISAM .
Obviamente eu sei sobre mysqldump
, mas (também, obviamente) o problema aqui é criar um backup consistente sem bloquear todo o servidor de banco de dados pelo número de horas que serão necessárias para produzir todo o arquivo de backup sql.