Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) corruption in the InnoDB tablespace


Rinaldo

Pergunta

Boa tarde, pessoal.

Creio que meu banco de dados MySql que está rodando no Server 2003 corrompeu.

Ao acessar o log, tenho esta informação

"corruption in the InnoDB tablespace"

Uso o Mysql Front e o Administrator

Há alguma forma de recuperar os dados?

Obrigado.

Editado por Rinaldo
Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0
Boa tarde, pessoal.

Creio que meu banco de dados MySql que está rodando no Server 2003 corrompeu.

Ao acessar o log, tenho esta informação

"corruption in the InnoDB tablespace"

Uso o Mysql Front e o Administrator

Há alguma forma de recuperar os dados?

Obrigado.

Mesmo assim você consegue acessar os dados?

Se sim, faça um dump o mais rápido possível. Use o Mysqldump para isto.

Mostre na integra a mensagem que aparece.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde.

Na verdade eu não consigo mais acesso a este banco.

Sempre que tento, o Mysql server cai.

A informação do LOG é esta.

---------------------------------------------------------------------------------------------------------

InnoDB: Last MySQL binlog file position 0 0, file name

InnoDB: Starting in background the rollback of uncommitted transactions

080513 15:32:42 InnoDB: Rolling back trx with id 0 4051265, 23 rows to undo

080513 15:32:42 InnoDB: Started; log sequence number 0 490532470

080513 15:32:42InnoDB: Assertion failure in thread 768 in file .\rem\rem0rec.c line 339

InnoDB: We intentionally generate a memory trap.

InnoDB: Submit a detailed bug report to http://bugs.mysql.com.

InnoDB: If you get repeated assertion failures or crashes, even

InnoDB: immediately after the mysqld startup, there may be

InnoDB: corruption in the InnoDB tablespace. Please refer to

InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html

InnoDB: about forcing recovery.

080513 15:32:43 [Note] D:\MySQL\MySQL Server 5.0\bin\mysqld-nt: ready for connections.

Version: '5.0.15-nt' socket: '' port: 3306 Official MySQL binary

080513 15:43:08 [Note] D:\MySQL\MySQL Server 5.0\bin\mysqld-nt: ready for connections.

Version: '5.0.15-nt' socket: '' port: 3306 Official MySQL binary

080513 15:44:57 [Note] D:\MySQL\MySQL Server 5.0\bin\mysqld-nt: ready for connections.

Version: '5.0.15-nt' socket: '' port: 3306 Official MySQL binary

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'Rinaldo'!

Vamos tentar uma operação para recuperação.

Siga os passoa abaixo exatamente nesta ordem com o banco parado.

1 - faça uma copia do arquivo My.ini

2 - edite o arquivo My.ini atual e insira as instruções abaixo.

[mysqld]

innodb_force_recovery = 4

3 - salve o arquivo my.ini e reinicie seu banco.

4 - Se ele conseguir reiniciar. vá à linha de comando (cmd), e execute o comando abaixo

mysqldump --opt --triggers --port=3306 --user=root --result-file=backup.sql

5 - salve o arquivo backup.sql criado em outro lugar;

6 – salve os arquivos de log binário em outro lugar;

7 – drop seus bancos de dados;

8 – restaure o backup;

9 – recupere os logs binários

10 – pare o servidor de banco

11 – edite o arquivo my.ini retirando a linha abaixo

innodb_force_recovery = 4

12 – reinicie seu servidor de banco.

Se esta operação falhar no item 3 o jeito vai ser

salvar os arquivos de log binário em outro lugar

reinstalar seu servidor de banco e recuperar os backups já existentes e

recuperar os logs binários.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá.

Será que os parâmetros estão corretos?

Quando executo o Mysqldump, ele cria um backup vazio.

No DOS, ele dá a mensagem de Help-me....

Usage: mysqldump [OPTIONS] databse [tables]... etc.

Editado por Rinaldo
Link para o comentário
Compartilhar em outros sites

  • 0
Dá a impressão que ele quer o nome da base e da tabela.

Oi, Rinaldo!

Estes são os parâmetros que uso em minhas rotinas de backup.

Mas vamos tendar acrescentar mais estes, --all-databases e --password[=sua_senha], assim:

mysqldump --opt --triggers --port=3306 --user=root --password=sua_senha --result-file=backup.sql --all-databases

substitua o texto sua_senha pela senha do root que você usa.

Se voê não usa password para acesso como root não coloque este parâmetro.

Você pose suprimir o parâmetro --port=3306 se a porta usada for outra, ou informar o número da porta.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia, Denis.

A coisa não está fácil.

Sempre que tento acessar algum dados, perco a conexão.

Agora veio a msg abaixo:

mysqldump: Got error: 2013: Lost connection to mysql server during query when using LOCK TABLES

Quero recuperar dados principalmente da tabela "dados" do banco "follow".

Independente de conseguir, agradeço pela força.

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia, Denis.

A coisa não está fácil.

Sempre que tento acessar algum dados, perco a conexão.

Agora veio a msg abaixo:

mysqldump: Got error: 2013: Lost connection to mysql server during query when using LOCK TABLES

Quero recuperar dados principalmente da tabela "dados" do banco "follow".

Independente de conseguir, agradeço pela força.

Abraços.

Tente retirar o parâmetro --opt. Já que você está sozinho na conexão não há a necessidade de lock nas tabelas e outros controles de acesso durante o backup.

Se você tiver acesso via select pode usar o comando SELECT ... INTO OUTFILE ... através do utilitario de linha de comando mysql.exe:

para acioná-lo use

mysql -u root -p

Você obterá um prompt deste tipo

mysql>

O comando é parecido com este que serve de exemplo no manual do mysql

SELECT a,b,a+b INTO OUTFILE "result.txt"

FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'

LINES TERMINATED BY "\n"

FROM tabela_teste;

Não se esqueça de terminar o comando com um ponto e virgula.

Pode usar o * mas é melhor relatar cada atributo para forçar a busca na posição correta já que sua tabela está danificada.

Tenha certeza de estar sozinho no servidor para fazer este tipo de tarefa (recuperação de dados).

Link para o comentário
Compartilhar em outros sites

  • 0

É Denis.

Qualquer tentativa de ler algum dado mesmo através do prompt, faz a conexão cair.

"Lost connection to Mysql server during query"

Estou achando que já era.

Na realidade, remanejei toda a estrutura do banco Mysql para um servidor reserva, podendo assim ficar a vontade para tentar.

Link para o comentário
Compartilhar em outros sites

  • 0
É Denis.

Qualquer tentativa de ler algum dado mesmo através do prompt, faz a conexão cair.

"Lost connection to Mysql server during query"

Estou achando que já era.

Na realidade, remanejei toda a estrutura do banco Mysql para um servidor reserva, podendo assim ficar a vontade para tentar.

Quando você fez o útimo backup?

Você mantem os logs binários ativos desde o seu último backup?

Se sim, Vamos a recuperação de seu backup usando os logs binários.

Responda as questões para podermos continuar.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Rinaldo!

Me informe, por favor, a data da última atualização dos arquivos ib_logfile0 e ib_logfile1.

Informe, também, o conteúdo do arquivo my.ini para que eu possa saber se seu log binário foi ativado e possa orientá-lo a recuperar os dados que estão faltando desde seu último backup.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia, Denis.

Tudo em ordem?

Seguem as informações abaixo.

Obrigado.

ib_logfile0 - 13/05

ib_logfile1 - 09/05

# MySQL Server Instance Configuration File

# ----------------------------------------------------------------------

# Generated by the MySQL Server Instance Configuration Wizard

#

#

# Installation Instructions

# ----------------------------------------------------------------------

#

# On Linux you can copy this file to /etc/my.cnf to set global options,

# mysql-data-dir/my.cnf to set server-specific options

# (@localstatedir@ for this installation) or to

# ~/.my.cnf to set user-specific options.

#

# On Windows you should keep this file in the installation directory

# of your server (e.g. C:\Program Files\MySQL\MySQL Server 4.1). To

# make sure the server reads the config file use the startup option

# "--defaults-file".

#

# To run run the server from the command line, execute this in a

# command line shell, e.g.

# mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server 4.1\my.ini"

#

# To install the server as a Windows service manually, execute this in a

# command line shell, e.g.

# mysqld --install MySQL41 --defaults-file="C:\Program Files\MySQL\MySQL Server 4.1\my.ini"

#

# And then execute this in a command line shell to start the server, e.g.

# net start MySQL41

#

#

# Guildlines for editing this file

# ----------------------------------------------------------------------

#

# In this file, you can use all long options that the program supports.

# If you want to know the options a program supports, start the program

# with the "--help" option.

#

# More detailed information about the individual options can also be

# found in the manual.

#

#

# CLIENT SECTION

# ----------------------------------------------------------------------

#

# The following options will be read by MySQL client applications.

# Note that only client applications shipped by MySQL are guaranteed

# to read this section. If you want your own MySQL client program to

# honor these values, you need to specify it as an option during the

# MySQL client library initialization.

#

[client]

port=3306

[mysql]

default-character-set=latin1

# SERVER SECTION

# ----------------------------------------------------------------------

#

# The following options will be read by the MySQL Server. Make sure that

# you have installed the server correctly (see above) so it reads this

# file.

#

[mysqld]

# The TCP/IP Port the MySQL Server will listen on

port=3306

#Path to installation directory. All paths are usually resolved relative to this.

basedir="D:/MySQL/MySQL Server 5.0/"

#Path to the database root

datadir="D:/MySQL/MySQL Server 5.0/Data/"

# The default character set that will be used when a new schema or table is

# created and no character set is defined

default-character-set=latin1

# The default storage engine that will be used when create new tables when

default-storage-engine=INNODB

# Set the SQL mode to strict

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

# The maximum amount of concurrent sessions the MySQL server will

# allow. One of these connections will be reserved for a user with

# SUPER privileges to allow the administrator to login even if the

# connection limit has been reached.

max_connections=100

# Query cache is used to cache SELECT results and later return them

# without actual executing the same query once again. Having the query

# cache enabled may result in significant speed improvements, if your

# have a lot of identical queries and rarely changing tables. See the

# "Qcache_lowmem_prunes" status variable to check if the current value

# is high enough for your load.

# Note: In case your tables change very often or if your queries are

# textually different every time, the query cache may result in a

# slowdown instead of a performance improvement.

query_cache_size=0

# The number of open tables for all threads. Increasing this value

# increases the number of file descriptors that mysqld requires.

# Therefore you have to make sure to set the amount of open files

# allowed to at least 4096 in the variable "open-files-limit" in

# section [mysqld_safe]

table_cache=256

# Maximum size for internal (in-memory) temporary tables. If a table

# grows larger than this value, it is automatically converted to disk

# based table This limitation is for a single table. There can be many

# of them.

tmp_table_size=13M

# How many threads we should keep in a cache for reuse. When a client

# disconnects, the client's threads are put in the cache if there aren't

# more than thread_cache_size threads from before. This greatly reduces

# the amount of thread creations needed if you have a lot of new

# connections. (Normally this doesn't give a notable performance

# improvement if you have a good thread implementation.)

thread_cache_size=8

#*** MyISAM Specific options

# The maximum size of the temporary file MySQL is allowed to use while

# recreating the index (during REPAIR, ALTER TABLE or LOAD DATA INFILE.

# If the file-size would be bigger than this, the index will be created

# through the key cache (which is slower).

myisam_max_sort_file_size=100G

# If the temporary file used for fast index creation would be bigger

# than using the key cache by the amount specified here, then prefer the

# key cache method. This is mainly used to force long character keys in

# large tables to use the slower key cache method to create the index.

myisam_max_extra_sort_file_size=100G

# If the temporary file used for fast index creation would be bigger

# than using the key cache by the amount specified here, then prefer the

# key cache method. This is mainly used to force long character keys in

# large tables to use the slower key cache method to create the index.

myisam_sort_buffer_size=26M

# Size of the Key Buffer, used to cache index blocks for MyISAM tables.

# Do not set it larger than 30% of your available memory, as some memory

# is also required by the OS to cache rows. Even if you're not using

# MyISAM tables, you should still set it to 8-64M as it will also be

# used for internal temporary disk tables.

key_buffer_size=18M

# Size of the buffer used for doing full table scans of MyISAM tables.

# Allocated per thread, if a full scan is needed.

read_buffer_size=64K

read_rnd_buffer_size=256K

# This buffer is allocated when MySQL needs to rebuild the index in

# REPAIR, OPTIMZE, ALTER table statements as well as in LOAD DATA INFILE

# into an empty table. It is allocated per thread so be careful with

# large settings.

sort_buffer_size=256K

#*** INNODB Specific options ***

# Use this option if you have a MySQL server with InnoDB support enabled

# but you do not plan to use it. This will save memory and disk space

# and speed up some things.

#skip-innodb

# Additional memory pool that is used by InnoDB to store metadata

# information. If InnoDB requires more memory for this purpose it will

# start to allocate it from the OS. As this is fast enough on most

# recent operating systems, you normally do not need to change this

# value. SHOW INNODB STATUS will display the current amount used.

innodb_additional_mem_pool_size=2M

# If set to 1, InnoDB will flush (fsync) the transaction logs to the

# disk at each commit, which offers full ACID behavior. If you are

# willing to compromise this safety, and you are running small

# transactions, you may set this to 0 or 2 to reduce disk I/O to the

# logs. Value 0 means that the log is only written to the log file and

# the log file flushed to disk approximately once per second. Value 2

# means the log is written to the log file at each commit, but the log

# file is only flushed to disk approximately once per second.

innodb_flush_log_at_trx_commit=1

# The size of the buffer InnoDB uses for buffering log data. As soon as

# it is full, InnoDB will have to flush it to disk. As it is flushed

# once per second anyway, it does not make sense to have it very large

# (even with long transactions).

innodb_log_buffer_size=1M

# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and

# row data. The bigger you set this the less disk I/O is needed to

# access data in tables. On a dedicated database server you may set this

# parameter up to 80% of the machine physical memory size. Do not set it

# too large, though, because competition of the physical memory may

# cause paging in the operating system. Note that on 32bit systems you

# might be limited to 2-3.5G of user level memory per process, so do not

# set it too high.

innodb_buffer_pool_size=32M

# Size of each log file in a log group. You should set the combined size

# of log files to about 25%-100% of your buffer pool size to avoid

# unneeded buffer pool flush activity on log file overwrite. However,

# note that a larger logfile size will increase the time needed for the

# recovery process.

innodb_log_file_size=16M

# Number of threads allowed inside the InnoDB kernel. The optimal value

# depends highly on the application, hardware as well as the OS

# scheduler properties. A too high value may lead to thread thrashing.

innodb_thread_concurrency=8

Link para o comentário
Compartilhar em outros sites

  • 0

Oi 'Rinaldo'!

Não encontrei a informação

log-bin

dentro de [mysqld] em seu my.ini. Isto significa que seu log binário não estava ativado no momento do crash.

Para confirmar

informe o resultado do comando abaixo

SHOW VARIABLES LIKE 'log%'

e verifique se aparece log_bin = ON.

Se não aparecer não há como recuperar.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá.

Está em OFF.

Cara.

De qualquer forma, agradeço muito.

Peguei o manual de referencias do Mysql e vou estudar um pouco mais para evitar que isso ocorra novamente.

Um grande abraço e obrigado novamente.

Um excelente fim de semana.

Link para o comentário
Compartilhar em outros sites

  • 0
Olá.

Está em OFF.

Cara.

De qualquer forma, agradeço muito.

Peguei o manual de referencias do Mysql e vou estudar um pouco mais para evitar que isso ocorra novamente.

Um grande abraço e obrigado novamente.

Um excelente fim de semana.

Obrigado e um bom final de semana para você, também.

Para fechar o tópico aqui vai um alerta a todos os que lerem este post e trabalham com mysql em qualquer engine, principalmente o InnoDB.

Mantenham o log binário ativo. Backup regular e log binário ativos são a chave entre a vida e a morte (administrador) do banco de dados em caso de desastre.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...