
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
*.frm
arquivos (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*.frm
arquivos) para minha pasta de dados local do mysql (C:\Program Files\xampp\mysql\data
).Em seguida, editei
my.cnf
(localizado emC:\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=6
ao 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.
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.
- Primeiro parei o mysql (estou rodando localmente usando XAMPP)
- 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"
- 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.
- 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) à
SYSTEM
conta (não ao administrador, administrador ou qualquer outro usuário que tenha sido usado para fazer a cópia); - adicionando
NETWORK SERVICE
aos 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:
Cliquei com o botão direito na pasta C:...\Data\ e selecionei Propriedades -> Segurança - Avançado e vi o Principal chamado NETWORK SERVICE
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.
I Clique no botão [Adicionar], depois no link Selecionar um principal e digite o nome do objeto NETWORK SERVICE e [OK]
Selecionei SERVIÇO DE REDE e cliquei em [editar] e marquei Controle total [ok]
Em seguida, repeti todas as etapas originais e o servidor iniciou conforme esperado.