Pequenas sagas do meu filho devorador de tweets
Quando me perguntam quando é que eu vou ter filhos, usualmente eu respondo:
- Eu já tenho um cachorro e um website, e eles já dão trabalho suficiente.
As encrencas que Pavlov me arruma eu já vivo contando por aqui. Já as do Blablabra...
Mini-saga 1: O backup que desbeckapeia
Foi assim: era sexta feira e eu estava mexendo na parte do código do Blablabra que separa as palavras de dentro dos tweets. Era cedinho e eu havia acabado de colocar uma alteração na versão de produção (a que fica no ar), e notei que uma coisa estava errada e algumas palavras poderiam estar sendo duplicadas na tabela onde elas ficam guardadas. "Ah, tudo bem. Vou voltar um backup e consertar os registros errados".
Aí fui lá no painel de controle do meu provedor de hospedagem (Dreamhost) e mandei voltar o backup de duas tabelas - tabelas que, é bom salientar, são o "coração" do site. Como elas são enormes (a maior delas tinha DEZ MILHÕES de linhas na época), deixei o backup restaurando e fui fazer outras coisas. Aí chega um email todo serelepe do Dreamhost, avisando que o backup havia sido restaurado.
Maravilha. Me ajeitei na cadeira, dei aquela esticada nos dedinhos sobre o teclado e falei, sorridente: "Vamulá acertar isso agora". Tentei abrir uma das tabelas e... erro de "Table not found". Tentei abrir a outra e deu o mesmo erro. Achando aquilo meio esquisito, resolvi olhar o banco de dados e meu queixo caiu: não somente o backup não havia sido restaurado como as tabelas originais haviam sido apagadas.
Sim, as tabelas tomaram Doril e simplesmente desapareceram. Aí eu morri, ressuscitei, fiquei branco de medo, vermelho de raiva e, sobretudo, furioso pela injustiça da coisa toda: pô, eu teoricamente tomei minhas precauções, eu tinha backups, backups são como uma vacina para a lei de Murphy, eles são feitos pra SALVAR a sua vida nessas horas - não complicá-las ainda mais!
Então, com o coração na boca, abri um chamado no suporte do NightmareHo... digo, Dreamhost. Eles tem uma opção no formulário que serve pra você indicar a gravidade/urgência do problema e eu fiz questão de escolher a mais séria delas, intitulada: "OMG TÁ TUDO DANDO PAU TEM GENTE MORRENDO!!!!" (não, isso não é exagero, a opção do menu deles tem exatamente este texto). E ainda assim eles demoraram QUATRO HORAS para me responder. E ainda disseram:
"Pedimos desculpas. Tudo que eu posso fazer é restaurar um backup mais antigo do seu banco de dados que esteja funcionando".
Só que isso ia me fazer perder AINDA MAIS dados de outras tabelas. O retrabalho seria enorme, eu perderia umas 24 horas de tweets monitorados e, pra piorar, dali a algumas horas eu tinha pegar Bethania no trabalho e, de carro, viajar 600 kms para passar o fim de semana em Belo Horizonte.
A sorte é que ela foi bastante compreensiva e me deixou ficar o sábado e o domingo debruçado em cima do notebook, pegando carona no wi-fi da casa da sogra e reprocessando MILHÕES de tweets gravados na base para recompor as tabelas perdidas. Era a opção menos pior - e mais rápida, considerando que a simples troca de dois emails com a turminha do Dreamhost levou quase oito horas. Mas no fim deu tudo certo e o Blablabra se recuperou plenamente de sua primeira grande baleiada.
Mini-saga 2: O backup que AINDA desbeckapeia
Aí ontem, depois do almoço, eu estava dando uma conferida nos trending topics do Blablabra quando o site, de repente, sai do ar. E não somente o site: o banco de dados não entrava mais, FTP caiu, Shell/SSH caiu, e até este blog, que fica na mesma hospedagem, havia ido pro limbo. "Pfft, aposto que alguém chutou a tomada do servidor lá no Dreamhost", pensei.
Deve ter sido o caso, porque uns cinco minutos depois foi tudo voltando pro ar. Só que o Blablabra parou de mostrar os gráficos e os resultados das buscas. Fuça daqui, fuça dali, e achei o problema: uma tabela corrompida no banco de dados.
Acontece que não era uma simples tabela: era uma daquelas tabelas da mini-saga anterior. E, sim, era a de dez milhões de linhas - que, naquela altura do campeonato, já tinha VINTE milhões. Aí apertei o botãozinho vermelho que desliga tudo (bem, na verdade é uma variável de configuração do Blablabra cujo nome é, convenientemente, "SERIOUSLY_BROKEN_MODE") e, com o coração na boca, fui pensar no que fazer.
É óbvio que "restaurar um backup da tabela" é a opção mais óbvia, simples e indolor, mas depois da saga anterior eu estava feito cachorro mordido por cobra que fica com medo de linguiça (especialmente agora, que não tem mais trema na palavra). Mas dessa vez não tinha jeito, eu precisava dos dados do backup, então fui lá e marquei uma opção de "restaurar a tabela com um nome diferente e não mexer nas tabelas originais".
Enquanto o sistema restaurava os dados, fui pesquisar minhas opções e resolvi tentar dar um comando chamado REPAIR TABLE. Eu estava descrente, já que a tabela estava realmente detonada e eram vinte milhões de linhas. "Nunca vai funcionar", pensei eu. Mas dei o comando mesmo assim e fiquei lá, com o coração na mão, feito um médico que deu um choque pra reanimar um paciente e agora está lá, olhando o monitor cardíaco, esperando que ele dê algum sinal de vida. Acontece que, no meu caso, este instante de suspense demorou mais de uma hora.
E quando eu já estava achando que era EU quem ia precisar de desfibrilador, *plim*! O "repair table" terminou de "repairzar" a tabela e - surpresa! - eis que ela havia ressuscitado dos mortos, perfeitinha, com todos os dados, como se nada tivesse acontecido. Deixei tudo funcionando e fui resolver outras coisas.
Aí, no finalzinho da tarde, eu fui checar meus emails e tinha um do Dreamhost, avisando que a restauração daquele backup que eu pedi havia terminado. "Bom, nem preciso mais da tabela antiga, deixa eu ir lá apagá-la". No banco de dados a tabela antiga estava lá e havia sido restaurada com um nome diferente, do jeitinho que eu pedi. Só que a tabela original, a que eu tinha consertado milagrosamente... desapareceu.
Mas dessa vez foi mais fácil recuperar os dados. Bastou ficar urrando de ódio por uns cinco minutos, esmurrar bastante as paredes e depois reprocessar alguns milhares de tweets para recompor os dados perdidos...