Embora eu tenha respondido a isso, ele realmente pertence ao Serverfault.
Derobert 18/05/09
31
@chandrajeet, você realmente deve aceitar a resposta mais votada.
Tower
2
Hey chandrajeet, por que você não aceita a resposta de derobert? Eu confirmo que funciona para mim também. Não é para você? stackoverflow.com/help/someone-answers
Taz
Respostas:
173
Se essas são tabelas MyISAM, a colocação dos arquivos .FRM, .MYD e .MYI em um diretório de banco de dados (por exemplo, /var/lib/mysql/dbname) tornará essa tabela disponível. Não precisa ser o mesmo banco de dados de onde vieram, o mesmo servidor, a mesma versão do MySQL ou a mesma arquitetura. Você também pode precisar alterar a propriedade da pasta (por exemplo, chown -R mysql:mysql /var/lib/mysql/dbname)
Observe que as permissões ( GRANT, etc.) fazem parte do mysqlbanco de dados. Portanto, eles não serão restaurados junto com as tabelas; pode ser necessário executar as GRANTinstruções apropriadas para criar usuários, conceder acesso etc. ( mysqlé possível restaurar o banco de dados, mas é necessário ter cuidado com as versões do MySQL e com as execuções necessárias do mysql_upgradeutilitário).
Na verdade, você provavelmente só precisa do .FRM (estrutura da tabela) e do .MYD (dados da tabela), mas precisará reparar a tabela para reconstruir o .MYI (índices).
A única restrição é que, se você estiver desatualizando, é melhor verificar as notas de versão (e provavelmente executar a tabela de reparo). Versões mais recentes do MySQL adicionam recursos, é claro.
[Embora deva ser óbvio, se você combinar e combinar tabelas, a integridade dos relacionamentos entre essas tabelas é seu problema; O MySQL não se importa, mas sua aplicação e seus usuários podem. Além disso, esse método não funciona de maneira alguma para tabelas do InnoDB. Somente o MyISAM, mas considerando os arquivos que você possui, você possui o MyISAM]
Isso realmente funcionaria sem adicionar as entradas apropriadas à tabela information_schema? Quero dizer, o MySQL precisa saber para procurar esses arquivos, certo?
Uau, eu me senti suja, mas remover o diretório inteiro do que eu acho que era uma instalação do MySQL4 no MySQL5.1 recriou magicamente as tabelas. Sem reinicialização ou qualquer coisa (no Windows).
Dave
4
Funciona, você só precisa se lembrar de executar (para todas as tabelas): check table sometable; e depois executar o reparo (apenas se necessário): repair table sometable;
Nux
3
Isso funcionou muito bem! Eu havia colocado os arquivos no lugar, mas o mysql não os estava "vendo" até mudar de propriedade para "mysql: mysql".
sean.boyer
26
Observe que se você deseja reconstruir o arquivo MYI, o uso correto de REPAIR TABLE é:
TABELA DE REPAROS sometable USE_FRM;
Caso contrário, você provavelmente obterá outro erro.
Siga estas etapas (depois que tudo falhar) e use o innodb_force_recovery = 4nível (não tenho certeza de que era necessário neste caso). Obrigado Senhor!
Joshua Stewardson
6
FYI: ibdata1é o InnoDB, não o MyISAM.
Derobert
14
Uma coisa a observar:
O arquivo .FRM possui sua estrutura de tabela e é específico para sua versão do MySQL.
O arquivo .MYD NÃO é específico para a versão, pelo menos não para versões secundárias.
O arquivo .MYI é específico, mas pode ser deixado de fora e regenerado REPAIR TABLEcomo as outras respostas dizem.
O objetivo desta resposta é informar que, se você tiver um despejo de esquema de suas tabelas, poderá usá-lo para gerar a estrutura da tabela e substituir esses arquivos .MYD pelos backups, excluir os arquivos MYI e repará-los. tudo. Dessa forma, você pode restaurar seus backups para outra versão do MySQL ou mover seu banco de dados completamente sem usar mysqldump. Eu achei isso super útil ao mover grandes bancos de dados.
Simples! Crie um banco de dados fictício (digamos abc)
Copie todos esses arquivos .myd, .myi, .frm para mysql \ data \ abc, em que mysql \ data \ é o local onde estão armazenados .myd, .myi, .frm para todos os bancos de dados.
Então vá para phpMyadmin, vá para db abc e você encontrará seu banco de dados.
A melhor maneira de recuperar os dados ... Instalei o WAMP, criei um novo banco de dados, copie os arquivos no novo diretório C: \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase, abra o phpmyadmin e seu novo banco de dados, você ver os dados
Alexandre georges
7
Eu acho que .myi você pode reparar de dentro do mysql.
Se você vir esse tipo de mensagem de erro do MySQL: Falha no banco de dados ao executar a consulta (consulta) 1016: Não é possível abrir o arquivo: 'sometable.MYI'. (errno: 145) Erro Msg: 1034: arquivo de chave incorreto para a tabela: 'sometable'. Tente consertá-lo e você provavelmente tiver uma tabela com falha ou corrompida.
Você pode verificar e reparar a tabela a partir de um prompt do mysql como este:
checktable sometable;+------------------+-------+----------+----------------------------+|Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------------------------+ | yourdb.sometable |check| warning |Tableis marked as crashed || yourdb.sometable |check| status | OK |+------------------+-------+----------+----------------------------+
repair table sometable;+------------------+--------+----------+----------+ |Table| Op | Msg_type | Msg_text |+------------------+--------+----------+----------+ | yourdb.sometable | repair | status | OK |+------------------+--------+----------+----------+
e agora sua mesa deve ficar bem:
checktable sometable;+------------------+-------+----------+----------+ |Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------+ | yourdb.sometable |check| status | OK |+------------------+-------+----------+----------+
Encontrei uma solução para converter os arquivos em um .sqlarquivo (você pode importar o .sqlarquivo para um servidor e recuperar o banco de dados), sem precisar acessar o /vardiretório, portanto, você não precisa ser um administrador de servidor para fazer isso.
Requer XAMPP ou MAMP instalado no seu computador.
Depois de instalar o XAMPP, navegue até o diretório de instalação (Normalmente C:\XAMPP) e o subdiretório mysql\data. O caminho completo deve serC:\XAMPP\mysql\data
Dentro, você verá pastas de outros bancos de dados criados. Copie e cole a pasta cheia de .myd, .myie .frmarquivos para lá. O caminho para essa pasta deve ser
C:\XAMPP\mysql\data\foldername\.mydfiles
Então visite localhost/phpmyadminem um navegador. Selecione o banco de dados que você acabou de colar na mysql\datapasta e clique em Exportar na barra de navegação. Escolhe a exportação como um .sqlarquivo. Aparecerá perguntando onde salvar o arquivo
E é isso aí! Você (deve) têm agora um .sqlarquivo que contém a base de dados que era originalmente .myd, .myie .frmarquivos. Você pode importá-lo para outro servidor através do phpMyAdmin criando um novo banco de dados e pressionando 'Importar' na barra de navegação, seguindo as etapas para importá-lo
É possível copiar os arquivos em um diretório subdiretório nomeado adequadamente da pasta de dados, desde que seja a mesma versão EXATA do mySQL e você tenha mantido todos os arquivos associados nesse diretório. Se você não tiver todos os arquivos, tenho certeza de que você terá problemas.
A descrição acima não foi suficiente para fazer as coisas funcionarem para mim (provavelmente densa ou preguiçosa), por isso criei esse script assim que encontrei a resposta para me ajudar no futuro. Espero que ajude os outros
vim fixperms.sh
#!/bin/sh
for D in`find .-type d`
do
echo $D;
chown -R mysql:mysql $D;
chmod -R 660$D;
chown mysql:mysql $D;
chmod 700$D;
done
echo Dont forget to restart mysql:/etc/init.d/mysqld restart;
Para aqueles que possuem o Windows XP e o servidor MySQL 5.5 instalado - o local do banco de dados é C: \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data, a menos que você tenha alterado o local na instalação do MySql Workbench GUI.
Respostas:
Se essas são tabelas MyISAM, a colocação dos arquivos .FRM, .MYD e .MYI em um diretório de banco de dados (por exemplo,
/var/lib/mysql/dbname
) tornará essa tabela disponível. Não precisa ser o mesmo banco de dados de onde vieram, o mesmo servidor, a mesma versão do MySQL ou a mesma arquitetura. Você também pode precisar alterar a propriedade da pasta (por exemplo,chown -R mysql:mysql /var/lib/mysql/dbname
)Observe que as permissões (
GRANT
, etc.) fazem parte domysql
banco de dados. Portanto, eles não serão restaurados junto com as tabelas; pode ser necessário executar asGRANT
instruções apropriadas para criar usuários, conceder acesso etc. (mysql
é possível restaurar o banco de dados, mas é necessário ter cuidado com as versões do MySQL e com as execuções necessárias domysql_upgrade
utilitário).Na verdade, você provavelmente só precisa do .FRM (estrutura da tabela) e do .MYD (dados da tabela), mas precisará reparar a tabela para reconstruir o .MYI (índices).
A única restrição é que, se você estiver desatualizando, é melhor verificar as notas de versão (e provavelmente executar a tabela de reparo). Versões mais recentes do MySQL adicionam recursos, é claro.
[Embora deva ser óbvio, se você combinar e combinar tabelas, a integridade dos relacionamentos entre essas tabelas é seu problema; O MySQL não se importa, mas sua aplicação e seus usuários podem. Além disso, esse método não funciona de maneira alguma para tabelas do InnoDB. Somente o MyISAM, mas considerando os arquivos que você possui, você possui o MyISAM]
fonte
check table sometable;
e depois executar o reparo (apenas se necessário):repair table sometable;
Observe que se você deseja reconstruir o arquivo MYI, o uso correto de REPAIR TABLE é:
TABELA DE REPAROS sometable USE_FRM;
Caso contrário, você provavelmente obterá outro erro.
fonte
Acabei de descobrir a solução para isso. Estou usando o MySQL 5.1 ou 5.6 no Windows 7.
Não é necessário localizar o arquivo .MYI e .MYD para esta recuperação.
fonte
innodb_force_recovery = 4
nível (não tenho certeza de que era necessário neste caso). Obrigado Senhor!ibdata1
é o InnoDB, não o MyISAM.Uma coisa a observar:
O arquivo .FRM possui sua estrutura de tabela e é específico para sua versão do MySQL.
O arquivo .MYD NÃO é específico para a versão, pelo menos não para versões secundárias.
O arquivo .MYI é específico, mas pode ser deixado de fora e regenerado
REPAIR TABLE
como as outras respostas dizem.O objetivo desta resposta é informar que, se você tiver um despejo de esquema de suas tabelas, poderá usá-lo para gerar a estrutura da tabela e substituir esses arquivos .MYD pelos backups, excluir os arquivos MYI e repará-los. tudo. Dessa forma, você pode restaurar seus backups para outra versão do MySQL ou mover seu banco de dados completamente sem usar
mysqldump
. Eu achei isso super útil ao mover grandes bancos de dados.fonte
Simples! Crie um banco de dados fictício (digamos abc)
Copie todos esses arquivos .myd, .myi, .frm para mysql \ data \ abc, em que mysql \ data \ é o local onde estão armazenados .myd, .myi, .frm para todos os bancos de dados.
Então vá para phpMyadmin, vá para db abc e você encontrará seu banco de dados.
fonte
Eu acho que .myi você pode reparar de dentro do mysql.
Se você vir esse tipo de mensagem de erro do MySQL: Falha no banco de dados ao executar a consulta (consulta) 1016: Não é possível abrir o arquivo: 'sometable.MYI'. (errno: 145) Erro Msg: 1034: arquivo de chave incorreto para a tabela: 'sometable'. Tente consertá-lo e você provavelmente tiver uma tabela com falha ou corrompida.
Você pode verificar e reparar a tabela a partir de um prompt do mysql como este:
e agora sua mesa deve ficar bem:
fonte
Encontrei uma solução para converter os arquivos em um
.sql
arquivo (você pode importar o.sql
arquivo para um servidor e recuperar o banco de dados), sem precisar acessar o/var
diretório, portanto, você não precisa ser um administrador de servidor para fazer isso.Requer XAMPP ou MAMP instalado no seu computador.
C:\XAMPP
) e o subdiretóriomysql\data
. O caminho completo deve serC:\XAMPP\mysql\data
Dentro, você verá pastas de outros bancos de dados criados. Copie e cole a pasta cheia de
.myd
,.myi
e.frm
arquivos para lá. O caminho para essa pasta deve serC:\XAMPP\mysql\data\foldername\.mydfiles
Então visite
localhost/phpmyadmin
em um navegador. Selecione o banco de dados que você acabou de colar namysql\data
pasta e clique em Exportar na barra de navegação. Escolhe a exportação como um.sql
arquivo. Aparecerá perguntando onde salvar o arquivoE é isso aí! Você (deve) têm agora um
.sql
arquivo que contém a base de dados que era originalmente.myd
,.myi
e.frm
arquivos. Você pode importá-lo para outro servidor através do phpMyAdmin criando um novo banco de dados e pressionando 'Importar' na barra de navegação, seguindo as etapas para importá-lofonte
É possível copiar os arquivos em um diretório subdiretório nomeado adequadamente da pasta de dados, desde que seja a mesma versão EXATA do mySQL e você tenha mantido todos os arquivos associados nesse diretório. Se você não tiver todos os arquivos, tenho certeza de que você terá problemas.
fonte
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
Ele diz para renomear os arquivos ib_ *. Eu fiz isso e me devolveu o db.
fonte
A descrição acima não foi suficiente para fazer as coisas funcionarem para mim (provavelmente densa ou preguiçosa), por isso criei esse script assim que encontrei a resposta para me ajudar no futuro. Espero que ajude os outros
fonte
Para aqueles que possuem o Windows XP e o servidor MySQL 5.5 instalado - o local do banco de dados é C: \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data, a menos que você tenha alterado o local na instalação do MySql Workbench GUI.
fonte