Home > Banco de dados > recuperação tabela mysql a partir do arquivo *.frm

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

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
  1. No comments yet.
  1. July 8, 2017 at 9:54 am

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: