jocajuni
(usa Debian)
Enviado em 31/07/2013 - 16:08h
accessdenid escreveu:
Boa noite a todos, estou com um problema nada animador ...
Tenho debian em um servidor e mysql rodando em raid 1.
Um dos discos torrou e o outro estava com problemas ao subir ... infelizmente o suporte usou o fsck para reparar e todo o diretorio /var/lib/mysql foi parar no /var/lost+found .
Somente um database de mais de 40 ficou certo ( arquivos MYI, frm ... ) dentro de uma pasta que o fsck criou ( 2121212121 ) o resto dos arquivos virou arquivos com nome "1212121212 ... ".
Alguem já conseguiu reverter isso? Resgatar os arquivos ... tenho o backup de 30 % do banco, e a estrutura 100% ... alguem tem uma idéia ???
Primeiramente eu faria uma copia de backup
entraria nesta pasta , primeiramente eu vou descobrir os arquivos que sao os indexes = MYI
# cp /var/lost+found/2121212121 /var/lost+found/meu_teste -Rf
# cd /var/lost+found/meu_teste
# for i in $(ls); do cp $i $i.MYI; touch $i.MYD $i.frm; done
# myisamchk *.MYI
os que responder
"Checking MyISAM file: xxxxxxxxxxxxxxxx.MYI
Data records: 0 Deleted blocks: 0
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check record links"
vc ja sabe que esse é os *.MYI
copie eles e guarde em um outro lugar
os que responder myisamchk: error: '1.MYI' is not a MyISAM-table
vc sabe que esses sao os .frm ou .MYD
# rm /var/lost+found/meu_teste/*.MYD
# rm /var/lost+found/meu_teste/*.frm
copie os MYI que sao Indexes e Delete os arquivos que corresponde o mesmo
exemplo e delete os MYI que nao sao indexes
EXEMPLO
"Checking MyISAM file: 1.MYI
Data records: 0 Deleted blocks: 0
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check record links"
"myisamchk: error: '2.MYD' is not a MyISAM-table"
"myisamchk: error: '3.MYD' is not a MyISAM-table"
# mkdir /var/lost+found/meu_teste_index/
# mv 1.MYI /var/lost+found/meu_teste_index/
# rm 1
Agora tendo so no diretorio os arquivos nao identificado (MYD ou frm) sem a extensao
faca o seguinte para descobrir se o arquivo e do tipo frm
crie em um diretorio do mysql um pasta que seria o db exemplo
#cp /var/lost+found/meu_teste/ /var/lib/mysql/ -Rf
# for i in $(ls); do cp $i $i.frm; touch $i.MYD $i.MYI; done
# chown mysql.mysql /var/lib/mysql/meu_teste -Rf
e execute se o root tiver senha
# mysqlcheck --databases meu_teste -uroot -p --auto-repair
se nao tiver
# mysqlcheck --databases meu_teste -uroot --auto-repair
os que responder
Incorrect information in file './meuteste/xxxxxxxxxxxx.frm'
serao os seu MYD
e os que responder so "Incorrect file format" serao os seus frm
portanto vc consegui determinar que sao os MYI,MYD e frm.
agora e so criar um script que pega um de cada -> coloque o mesmo nome para os tres e testa com o comando sql se responder a sql - bingo vc achou a tabela ( select * from meuteste.novo_nome )
[]s
Jocajuni