Archive

Posts Tagged ‘Banco de dados’

recuperação tabela mysql a partir do arquivo *.frm

September 10, 2014 1 comment

Ola pessoal, sempre coloco post com nomes intuitivo ou sugestivo hoje como estou com pressa fui bem direto :D. Tive um problema com meu cacti que a tabela poller_output estava dando erro no cacti mesmo um recover me informava a seguinte mensagem.

mysql> repair table poller_output USE_FRM;
+———————+——–+———-+——————+
| Table | Op | Msg_type | Msg_text |
+———————+——–+———-+——————+
| cacti.poller_output | repair | Warning | Can’t open table |
| cacti.poller_output | repair | status | Operation failed |
+———————+——–+———-+——————+
2 rows in set (0.00 sec)

mysql>

Mesmo tentando recuperar não foi possivel olhando os arquivos fisicamente no disco notei que somente existia um arquivo somente chamado poller_output.frm. Para ser bem resumido existem 2 engine de armazenamento: MyISAM, InnoDB. O InnoDB joga tudo em um arquivo somente. Já o MyISAM utiliza três arquivos:

 

Extensão do arquivo Finalidade
.frm Definicao de tabela
.MYD Tabela de dados
.MYI Tabela de índices

No meu caso o cacti utiliza tabelas em MyISAM, então dos três arquivos somente tinha 1 o .frm :D. Para recover da definicao de tabela você precisa utilizar o utilitário mysqlfrm que vem no pacote mysql-utilities disponivel em http://dev.mysql.com/downloads/utilities/. Aí você me diz? mas para saber a definição da tabela e so ir na console do mysql e digitar o comando desc poller_output! que burro ricardo 😀 Aí te digo foi a primeira coisa que tentei 😀

mysql> desc poller_output;
ERROR 1017 (HY000): Can’t find file: ‘poller_output’ (errno: 2)
mysql>

Entao baixe o mysql-utilities instale e rode o comando.

root@apolo:/var/lib/mysql/cacti# mysqlfrm –diagnostic poller_output.frm
# WARNING: Cannot generate character set or collation names without the –server option.
# CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.
# Reading .frm file for poller_output.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:

CREATE TABLE `poller_output` (
`local_data_id` mediumint(8) unsigned NOT NULL,
`rrd_name` varchar(19) NOT NULL,
`time` datetime NOT NULL,
`output` text,
PRIMARY KEY `PRIMARY` (`local_data_id`,`rrd_name`,`time`)
) ENGINE=MyISAM;

#…done.
root@apolo:/var/lib/mysql/cacti#

Pronto de posse da definição da tabela recrie a tabela na console do mysql. Mas e os dados? bem não sei que quedas dágua deu que sumiu meu .MYD, como são dados de monitoramento e “aceitavel”, caso contrario eu teria um backup 😀

Vlw

Advertisements