Como restaurar o banco de dados mysql usando arquivos na pasta de dados?

Como restaurar o banco de dados mysql usando arquivos na pasta de dados?

Não consigo rodar meu mysql desde ontem e não consigo acessá-lo, então decidi reinstalá-lo. Fiz backup da pasta de dados, que presumo contém tudo o que preciso para restaurar o banco de dados após reinstalar o mysql.

Copiei, colei e substituí a pasta de dados antiga pelo backup, mas ocorre um erro que impedirá o carregamento do mysql.

Copiei e colei apenas a pasta com o mesmo nome do meu banco de dados (digamosmeu banco de dados) e funciona perfeitamente, mas o banco de dados em si não pôde ser carregado. Quando tento acessar o banco de dados com SQLyog, todas as tabelas geram "Não é possível abrir o arquivonomedatabela.ibd"

Como posso restaurar meu banco de dados corretamente?

Estou usando MySQL 4.1 e Windows 7.

Responder1

Restaurando arquivos MySQL InnoDB no Windows

Os arquivos do tipo InnoDB foram uma tarefa mais difícil, e é por isso que estou escrevendo este post. Tive dificuldade em descobrir como fazer isso, mas reuni informações suficientes para realizar a tarefa. Agora, num esforço para retribuir, explicarei exatamente o que fiz para restaurá-lo.

Em nossos backups tínhamos os seguintes arquivos:

\MySQL\MySQL Server 4.1\data\ibdata1
\MySQL\MySQL Server 4.1\data\ib_logfile0
\MySQL\MySQL Server 4.1\data\ib_logfile1

Além disso, na pasta de dados havia uma pasta com o nome do banco de dados que eu estava restaurando e que continha *.frmarquivos ( table_name.frm).

Fiz a restauração na minha máquina de desenvolvimento, e não no servidor real, porque não queria estragar o que estava funcionando no servidor. Eu já tinha o MySQL instalado a partir de uma instalação do XAMPP. (Minha caixa de desenvolvimento está executando o Windows XP SP2). O XAMPP instala o MySQL de maneira um pouco diferente da instalação normal do MySQL, então se seguir o que fiz aqui ajudar, você pode querer instalá-lo.

Parei meu serviço MySQL pela primeira vez usando o painel de controle do XAMPP.

Mudei os arquivos listados acima ( ib*arquivos e a pasta que contém os *.frmarquivos) para minha pasta de dados local do mysql ( C:\Program Files\xampp\mysql\data).

Em seguida, editei my.cnf(localizado em C:\Program Files\xampp\mysql\bin) e fiz as seguintes alterações (começando na linha 66 para mim):

VELHO:

skip-innodb
#innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=5

NOVO:

#skip-innodb
innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M
set-variable = innodb_log_file_size=170M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50

(Tive que definir innodb_log_file_size para o tamanho real do meu arquivo de log)

Em seguida, editei o arquivo em lote do XAMPP que inicia o serviço mysql ( C:\Program Files\xampp\mysql_start.bat). Adicionei –innodb_force_recovery=6ao final da chamada para mysqld. Então a linha 8 desse arquivo agora diz:

mysql\bin\mysqld –defaults-file=mysql\bin\my.cnf –standalone –console –innodb_force_recovery=6

Isso funcionou! Meus bancos de dados foram recuperados em minha máquina. eu usei SQLyogpara fazer um dump sql do banco de dados para restaurá-lo em nosso servidor de produção.

Fonte


Recursos adicionais

Responder2

Uma votação positiva e obrigado aPimp Juice TIpara uma ótima resposta. Resolvi um problema semelhante com a ajuda de sua resposta, mas de maneira um pouco diferente, então pensei em compartilhar.

Atualizei para uma versão mais recente do XAMPP. Eu não uso o instalador, apenas faço o download como um novo zip e, ao fazer isso, tenho problemas.

  1. Primeiro parei o mysql (estou rodando localmente usando XAMPP)
  2. Em seguida, abri omeu.iniarquivo localizado em/xampp/mysql/bin/arquivo - para mim minhas alterações começaram em #skip-innoodb(linha 136). O número da sua linha pode variar.

Aqui está o que encontrei inicialmente:

#... omitted lines above ...
#skip-innodb
innodb_data_home_dir = "/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "/xampp/mysql/data"
#innodb_log_arch_dir = "/xampp/mysql/data"
#... omitted lines below ...

A questão aqui parece ser os caminhos relativos; observe a falta C:nos diretórios acima. Tornar os caminhos absolutos foi meu primeiro passo.

#skip-innodb
innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"
#innodb_log_arch_dir = "C:/xampp/mysql/data"
  1. Enquanto estiver na nova versão do XAMPP quero começar a usar:
    • Em/xampp/mysql/Eu renomeeidadosparadados_antigos
    • Então ainda no mesmo diretório/xampp/mysql/eu copiei odadosdiretório do meu antigo XAMPP.
  2. Então eu liguei meu servidor mysql e tudo estava pronto

Espero que isso ajude alguém!

Responder3

Isso é o que fiz no Windows 10 com MySQL 5.7

Ambas as instalações foram feitas com o MySQL Installer, portanto as configurações foram as mesmas e um pouco diferentes daquelas descritas nas outras respostas.

Basicamente, da pasta de instalação original copiei apenas as pastas com os nomes dos esquemas nos quais estava interessado. A seguir, as configurações fundamentais a serem aplicadas estão na guia Segurança da caixa de diálogo de propriedades da pasta:

  • atribuir a propriedade da pasta de dados principal e de todas as suas subpastas (incluindo as recém-copiadas) à SYSTEMconta (não ao administrador, administrador ou qualquer outro usuário que tenha sido usado para fazer a cópia);
  • adicionando NETWORK SERVICEaos usuários com controle total sobre a pasta.

Encontrei estas instruções nos fóruns do MySQL, aqui estão as mensagens originais:

Instruções originais e completas de Ray Yates:

Para a posteridade:

  1. Cliquei com o botão direito na pasta C:...\Data\ e selecionei Propriedades -> Segurança - Avançado e vi o Principal chamado NETWORK SERVICE

  2. Em uma janela separada, cliquei com o botão direito na pasta copiar E:\MYSQL\Data\ e descobri que não havia tal configuração.

  3. I Clique no botão [Adicionar], depois no link Selecionar um principal e digite o nome do objeto NETWORK SERVICE e [OK]

  4. Selecionei SERVIÇO DE REDE e cliquei em [editar] e marquei Controle total [ok]

  5. Em seguida, repeti todas as etapas originais e o servidor iniciou conforme esperado.

informação relacionada