Como restaurar um dos meus bancos de dados MySQL a partir .myd
, .myi
, .frm
arquivos?
Como restaurar um dos meus bancos de dados MySQL a partir .myd
, .myi
, .frm
arquivos?
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 do mysql
banco de dados. Portanto, eles não serão restaurados junto com as tabelas; pode ser necessário executar as GRANT
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 do mysql_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]
check table sometable;
e depois executar o reparo (apenas se necessário): repair table sometable;
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.
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.
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.
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:
check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------------------------+
| yourdb.sometable | check | warning | Table is 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:
check table sometable;
+------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
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ó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
, .myi
e .frm
arquivos para lá. O caminho para essa pasta deve ser
C:\XAMPP\mysql\data\foldername\.mydfiles
Então visite localhost/phpmyadmin
em um navegador. Selecione o banco de dados que você acabou de colar na mysql\data
pasta e clique em Exportar na barra de navegação. Escolhe a exportação como um .sql
arquivo. Aparecerá perguntando onde salvar o arquivo
E é 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á-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.
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.
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.