Restaurando o banco de dados MySQL a partir de arquivos físicos

139

É possível restaurar um banco de dados MySQL a partir dos arquivos físicos do banco de dados. Eu tenho um diretório que possui os seguintes tipos de arquivo:

client.frm
client.MYD
client.MYI

mas por mais 20 mesas.

Eu normalmente uso o mysqldump ou uma ferramenta similar para obter tudo em 1 arquivo SQL. Qual é a maneira de lidar com esses tipos de arquivos?

Abdullah Jibaly
fonte
Eu tenho o mesmo problema: vários arquivos com extensões FRM, MYD e MYI. Eu também tenho os arquivos ib_logfile0, ib_logfile1 e ibdata1. Não consigo acessar um servidor em execução ou criar um despejo. Tentei rodar um novo servidor MySQL e usar os arquivos, mas não consegui ... Alguém tem um claro como fazer?
flo5783

Respostas:

132

Uma tabela MySQL MyISAM é a combinação de três arquivos:

  • O arquivo FRM é a definição de tabela.
  • O arquivo MYD é onde os dados reais são armazenados.
  • O arquivo MYI é o local onde os índices criados na tabela são armazenados.

Você deve poder restaurá-lo copiando-o na pasta do banco de dados (no linux, o local padrão é /var/lib/mysql/)

Você deve fazê-lo enquanto o servidor não estiver em execução.

Vincent
fonte
64
isso é verdade apenas para tabelas MyISAM. O InnoDB armazena suas tabelas e índices em um único espaço de tabela *, que por padrão consiste nos 3 arquivos ibdata1, ib_logfile0 e ib_logfile1. para restaurar um banco de dados, você também precisaria desses arquivos. * os espaços de tabela por tabela são possíveis, mas não o padrão
ax.
21
Ele diz que possui arquivos .frm .myi e .myd. Então assumi que eram tabelas MyISAM.
247 Vincent
5
Resposta valiosa, mas tive que dar um passo adiante para que as coisas funcionassem bem: como eu precisava fazer login como root para restaurar os arquivos, o mysqlusuário que estava executando o mysqldprocesso não podia acessá-los. Fazer um chmod -R mysql:mysql .diretório de dados mysql é rápido e fácil, mas descobrir, antes disso, por que todos os meus bancos de dados resoterd pareciam não ter tabelas demoravam um pouco mais.
Edurne Pascual
10
herenvardo Eu acho que você quis chown não chmod
Oliver M Grech
2
Para recapitular algumas das notas importantes, você pode ter que chowncopiar os arquivos assim:sudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr 20/12/16
50

A partir da resposta de @Vicent, eu já restaurei o banco de dados MySQL como abaixo:

Etapa 1. Desligar o servidor Mysql

Etapa 2. Copie o banco de dados na pasta do banco de dados (no linux, o local padrão é / var / lib / mysql). Mantenha o mesmo nome do banco de dados e o mesmo nome do banco de dados no modo mysql.

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

Etapa 3: Mude o próprio e mude o modo da pasta:

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

Etapa 4: Copie ibdata1 na pasta do banco de dados

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

Etapa 5: copie os arquivos ib_logfile0 e ib_logfile1 na pasta do banco de dados.

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

Lembre-se de mudar próprio e alterar a raiz desses arquivos:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

ou

sudo chown -R mysql:mysql /var/lib/mysql

Etapa 6 (Opcional): Meu site tem configuração para armazenar arquivos em um local específico e, em seguida, copio-os exatamente para o local correspondente.

Etapa 7: Inicie o servidor Mysql. Tudo volta e se diverte.

É isso.

Veja mais informações em: https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/

biolinh
fonte
4
+1 para obter instruções detalhadas passo a passo. Mas editei algumas declarações para refletir verdadeiramente o que deveriam ser.
Peter
Ocorreu um erro # 1932, incapaz de acessar os dados. Os bancos de dados aparecem, mas os dados não estão acessíveis. Executando o XAMPP 7.2.12 no MAC OS X Mojave.
precisa saber é o seguinte
@ Steve1754a O erro pode, por várias razões: 1. Você move um banco de dados do Mac OS para o Mac OS? 2. Verifique a permissão desses arquivos / dados / tabela
biolinh
Respostas: 1. Sim; 2. eu fiz. Eu tive que realizar uma reconstrução completa do meu banco de dados. Não foi possível descobrir uma solução. Moral para a história: sempre crie um backup do banco de dados. Eu gostaria que houvesse uma maneira fácil de fazer isso automaticamente no XAMPP.
Steve1754a
1
você salvou minha vida
SpongePablo
8

Se você estiver restaurando a pasta, não se esqueça de exibir os arquivos no mysql: mysql,

chown -R mysql:mysql /var/lib/mysql-data

caso contrário você receberá erros ao tentar soltar um banco de dados ou adicionar uma nova coluna etc.

e reinicie o MySQL

service mysql restart
Joel Davey
fonte
2
isso não é realmente uma resposta para a pergunta, mas foi muito útil.
precisa saber é
tudo actualy você não deve chown para mysql, a pasta de banco de dados mysql deve reter grupo raiz
Galvani
8

Eu tenho o mesmo problema, mas não foi possível recuperar com êxito o banco de dados, com base nas instruções acima.

Eu só consegui recuperar pastas de banco de dados mysql do meu sistema operacional Ubuntu. Meu problema é como recuperar meu banco de dados com essas pastas de dados mysql ilegíveis. Então, voltei ao sistema operacional win7 para o ambiente de desenvolvimento.

* NOTA Eu tenho um servidor de banco de dados existente em execução no win7 e preciso apenas de alguns arquivos de banco de dados para recuperar os arquivos recuperados. Para recuperar com êxito os arquivos de banco de dados do Ubuntu OS, preciso instalar recentemente o servidor de banco de dados mysql (mesma versão do Ubuntu OS no meu win7 OS) para recuperar tudo naquele antigo servidor de banco de dados.

  1. Crie outro novo servidor de banco de dados mysql com a mesma versão dos arquivos recuperados.

  2. Pare o servidor mysql

  3. copie a pasta recuperada e cole no banco de dados mysql (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data) é armazenado.

  4. copie o arquivo ibdata1 localizado na pasta instalada do linux mysql e cole-o em (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data). Basta substituir o existente ou fazer backup antes de substituir.

  5. inicie o servidor mysql e verifique se você recuperou com sucesso os arquivos do banco de dados.

  6. Para usar o banco de dados recuperado no meu servidor mysql atualmente usado, basta exportar o banco de dados recuperado e importá-lo para o meu servidor mysql existente.

Espero que isso ajude, porque nada mais funcionou para mim.

Ivan Igniter
fonte
1
O método também funciona no ubuntu / debian com arquivos ibdata1, ib_logfile0 e ib_logfile1 e pasta do banco de dados. o usuário não será copiado, mas você poderá adicionar um novo usuário ao banco de dados e despejá-lo com isso.
2224616
2

Com o MySql 5.1 (Win7). Para recriar DBs (InnoDbs), substituí todo o conteúdo dos seguintes diretórios (parâmetros my.ini):

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

Depois disso, iniciei o MySql Service e tudo funciona bem.

sergey.olifirenko
fonte
1

Sim, ele é! Basta adicioná-los à sua pasta de banco de dados (dependendo do sistema operacional) e execute um comando como "Permissões de Correção do MySQL". Isso armazenou novamente o banco de dados. Veja também que as permissões corretas estão definidas nos arquivos também.

Filip Ekberg
fonte
Eu fiz isso, mas eu não reconhece as tabelas. Como eu disse no meu comentário na resposta anterior.
orezvani
0

Certa vez, copiei esses arquivos na pasta de armazenamento do banco de dados para um banco de dados mysql que estava funcionando, iniciei o db e esperei que ele "reparasse" os arquivos, depois os extraí com o mysqldump.

Spikolynn
fonte
-1

No meu caso, basta remover o tc.log em / var / lib / mysql para iniciar o mariadb / mysql novamente.

SirJohnFranklin
fonte
este não é um problema de poder iniciar / reiniciar o servidor mysql.
Oluwatumbi