Benötige Hilfe mit Corrupt Tables (Innodb)

Benötige Hilfe mit Corrupt Tables (Innodb)

am 11.12.2005 12:44:13 von Richard

Hallo
Unser Mysql Server stürzt alle paar Stunden ab mit den Hinweis in den Logs:
InnoDB: Database page corruption on disk or a failed
Und einer Url bez. forcing recovery als info

Nachdem ich ein Php script durchlaufen lies (mit Check Table Syntax auf alle
Tables in dieser DB) gib dieser mir aus das 3 Tables corrupt sind.

Was ist nun die lösung hierfuer?
Dumpen und wieder zurueckspielen, oder muss man hierfuer alte tables wieder
einspielen wo es noch ging.
Ich hatte versucht die Kaputten Tables zu dumpen mit
/usr/bin/mysqldump --user=rt_user --password='xxx' rt3 [CachedGroupMembers]
> /usr/src/rt3cached.sql
Dann kam zurueck:
/usr/bin/mysqldump: Got error: 1044: Access denied for user
'rt_user'@'localhost' to database 'rt3' when doing LOCK TABLES

Danke
Richard

Re: Benötige Hilfe mit Corrupt Tables (Innodb)

am 11.12.2005 13:43:41 von Dirk Brosowski

Richard schrieb:
> Hallo
> Unser Mysql Server stürzt alle paar Stunden ab mit den Hinweis in den Logs:
> InnoDB: Database page corruption on disk or a failed
> Und einer Url bez. forcing recovery als info
>
> Nachdem ich ein Php script durchlaufen lies (mit Check Table Syntax auf alle
> Tables in dieser DB) gib dieser mir aus das 3 Tables corrupt sind.
>
> Was ist nun die lösung hierfuer?
> Dumpen und wieder zurueckspielen, oder muss man hierfuer alte tables wieder
> einspielen wo es noch ging.
> Ich hatte versucht die Kaputten Tables zu dumpen mit
> /usr/bin/mysqldump --user=rt_user --password='xxx' rt3 [CachedGroupMembers]
> > /usr/src/rt3cached.sql
> Dann kam zurueck:
> /usr/bin/mysqldump: Got error: 1044: Access denied for user
> 'rt_user'@'localhost' to database 'rt3' when doing LOCK TABLES

Lies die Doku zum Thema Zugriffsrechte und gebe dem User die Rechte für
den Zugriff.

Interessant wäre es zu wissen, warum die Tabellen corrupt sind. Ist
evtl. die Platte defekt?

Grüße

Dirk

Re: Benötige Hilfe mit Corrupt Tables (Innodb)

am 11.12.2005 14:15:42 von Richard

Hallo
Ja ich nehme an die Platte, da diese schon einmal Probleme hatte.
Dies wird noch angeschaut.
Danke fuer den Tip bez Access.
Reicht ein normaler Dump aus ? Oder muss es ein backup dump sein von
funktionierenden Tables?
bye

"Dirk Brosowski" schrieb im Newsbeitrag
news:402l7uF17ub6kU1@individual.net...
> Richard schrieb:
>> Hallo
>> Unser Mysql Server stürzt alle paar Stunden ab mit den Hinweis in den
>> Logs:
>> InnoDB: Database page corruption on disk or a failed
>> Und einer Url bez. forcing recovery als info
>>
>> Nachdem ich ein Php script durchlaufen lies (mit Check Table Syntax auf
>> alle Tables in dieser DB) gib dieser mir aus das 3 Tables corrupt sind.
>>
>> Was ist nun die lösung hierfuer?
>> Dumpen und wieder zurueckspielen, oder muss man hierfuer alte tables
>> wieder einspielen wo es noch ging.
>> Ich hatte versucht die Kaputten Tables zu dumpen mit
>> /usr/bin/mysqldump --user=rt_user --password='xxx' rt3
>> [CachedGroupMembers] > /usr/src/rt3cached.sql
>> Dann kam zurueck:
>> /usr/bin/mysqldump: Got error: 1044: Access denied for user
>> 'rt_user'@'localhost' to database 'rt3' when doing LOCK TABLES
>
> Lies die Doku zum Thema Zugriffsrechte und gebe dem User die Rechte für
> den Zugriff.
>
> Interessant wäre es zu wissen, warum die Tabellen corrupt sind. Ist evtl.
> die Platte defekt?
>
> Grüße
>
> Dirk

Re: Benötige Hilfe mit Corrupt Tables (Innodb)

am 11.12.2005 15:22:07 von Richard

Wie kann ich eine Table wieder zurueckspielen mit
/usr/bin/mysqldump --user=rt_user --password='xxx' rt3 Transactions <
/usr/src/rt3transactions.sql

Gibt er mir nur folgendes aus, wie kann ich es jedoch wieder zurueckdumpen
in die table?
danke!
-- MySQL dump 10.9
--
-- Host: localhost Database: rt3
-- ------------------------------------------------------
-- Server version 4.1.13-standard

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,
FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `Transactions`
--

DROP TABLE IF EXISTS `Transactions`;
CREATE TABLE `Transactions` (
`id` int(11) NOT NULL auto_increment,
`ObjectId` int(11) NOT NULL default '0',
`TimeTaken` int(11) NOT NULL default '0',
`Type` varchar(20) default NULL,
`Field` varchar(40) default NULL,
`OldValue` varchar(255) default NULL,
`NewValue` varchar(255) default NULL,
`Data` varchar(255) default NULL,
`Creator` int(11) NOT NULL default '0',
`Created` datetime default NULL,
`ObjectType` varchar(64) NOT NULL default '',
`ReferenceType` varchar(255) default NULL,
`OldReference` int(11) default NULL,
`NewReference` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `Transactions1` (`ObjectType`,`ObjectId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `Transactions`
--


/*!40000 ALTER TABLE `Transactions` DISABLE KEYS */;
LOCK TABLES `Transactions` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `Transactions` ENABLE KEYS */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Re: Benötige Hilfe mit Corrupt Tables (Innodb)

am 11.12.2005 15:29:17 von Axel Schwenke

"Richard" wrote:

> Unser Mysql Server stürzt alle paar Stunden ab mit den Hinweis in den Logs:
> InnoDB: Database page corruption on disk or a failed
> Und einer Url bez. forcing recovery als info

Und, hast du unter dieser URL mal nachgelesen? Warum nicht?

> Nachdem ich ein Php script durchlaufen lies (mit Check Table Syntax auf alle
> Tables in dieser DB) gib dieser mir aus das 3 Tables corrupt sind.

Ja, das hat dir MySQL oben schon gesagt. Mehr noch: deine Harware macht
langsam aber sicher die Grätsche. Du solltest also ASAP deine Daten
sichern und auf einer neuen Platte wieder einspielen.

> Was ist nun die lösung hierfuer?
> Dumpen und wieder zurueckspielen, oder muss man hierfuer alte tables wieder
> einspielen wo es noch ging.

Diesen Satz verstehe ich nicht. Aber falls du meinst, daß du ein altes
Backup hast, kannst natürlich auch dieses wieder einspielen. Ob ein
altes Backup mit alten(?) Daten oder aktuelles Backup mit evtl. ein
paar fehlenden Datensätzen besser ist, mußt du wissen.

> /usr/bin/mysqldump: Got error: 1044: Access denied for user
> 'rt_user'@'localhost' to database 'rt3' when doing LOCK TABLES

Das hat mit deiner kaputten Platte nix zu tun. Gib dem rt_user halt
die passenden Rechte oder verwende gleich den superuser-Account.
Und RTFM - schließlich willst du nicht, daß dir MySQL um die Ohren
fliegt, wenn die Daten von den kaputten Sektoren deiner Platte nicht
gelesen werden können.


XL

Re: Benötige Hilfe mit Corrupt Tables (Innodb)

am 11.12.2005 16:05:57 von Christian Kirsch

Richard wrote:
> Wie kann ich eine Table wieder zurueckspielen mit
> /usr/bin/mysqldump --user=rt_user --password='xxx' rt3 Transactions <
> /usr/src/rt3transactions.sql
>
> Gibt er mir nur folgendes aus, wie kann ich es jedoch wieder zurueckdumpen
> in die table?

mit mysql. Das versteht nämlich SQL-Befehle.

Re: Benötige Hilfe mit Corrupt Tables (Innodb)

am 11.12.2005 16:08:09 von Richard

Hallo
Danke an Dirk+Alex
a.) Eine neue HD wird eingebaut da diese schon seit laengerem Probleme
macht.
Mein Problem jetzt, wie kann ich die 3 betroffenen Tables fixen, ohne das
ich auf ein Backup zurueckgreifen muss.
Ich habe zuerst die 3 Betroffenen Tables gedumpt mit
mysqldump user pw datenbank table >/name.sql

Wenn ich nun a.) Diese zurueckspiele , aendert sich nichts Tables bleiben
corrupt.
Wenn ich nun b.) Die Table loesche, neu erstelle und dann das .sql file
zurueckspielen will passiert nichts es kommt nur so etwas wie unten in
dieser Message, und dann aus, kein Dumpen kein Vorgang nichts.
Kann man den diese Table nicht in einer neu erstellten Table, mit Feldern
welche leer ist zurueckspielen?
Zumindest bei mir klappt es nicht (commando in obrigen Newspost)
Danke

----------------
-- MySQL dump 10.9
--
-- Host: localhost Database: rt3
-- ------------------------------------------------------
-- Server version 4.1.13-standard

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,
FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `Transactions`
--

DROP TABLE IF EXISTS `Transactions`;
CREATE TABLE `Transactions` (
`id` int(11) NOT NULL auto_increment,
`ObjectId` int(11) NOT NULL default '0',
`TimeTaken` int(11) NOT NULL default '0',
`Type` varchar(20) default NULL,
`Field` varchar(40) default NULL,
`OldValue` varchar(255) default NULL,
`NewValue` varchar(255) default NULL,
`Data` varchar(255) default NULL,
`Creator` int(11) NOT NULL default '0',
`Created` datetime default NULL,
`ObjectType` varchar(64) NOT NULL default '',
`ReferenceType` varchar(255) default NULL,
`OldReference` int(11) default NULL,
`NewReference` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `Transactions1` (`ObjectType`,`ObjectId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `Transactions`
--


/*!40000 ALTER TABLE `Transactions` DISABLE KEYS */;
LOCK TABLES `Transactions` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `Transactions` ENABLE KEYS */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Re: Benötige Hilfe mit Corrupt Tables (Innodb)

am 11.12.2005 16:40:37 von Dirk Brosowski

Richard schrieb:
> Wie kann ich eine Table wieder zurueckspielen mit
> /usr/bin/mysqldump --user=rt_user --password='xxx' rt3 Transactions <
> /usr/src/rt3transactions.sql


Es wäre sehr nett, wenn du darauf verzichtest mich direkt per Mail zu
kontaktieren... das ist definitiv nicht okay.

Greetings

Re: Benötige Hilfe mit Corrupt Tables (Innodb)

am 11.12.2005 17:40:43 von Axel Schwenke

"Richard" wrote:

> Mein Problem jetzt, wie kann ich die 3 betroffenen Tables fixen, ohne das
> ich auf ein Backup zurueckgreifen muss.

Möglicherweise gar nicht. Wenn interne Datenstrukturen in InnoDBs
Tablespace kaputt sind, kann InnoDB die betroffenen Tabellen
möglicherweise auch nicht löschen/überschreiben. Auf jeden Fall wird
MySQL beim Versuch, auf inkonsistente Datenstrukturen zu schreiben,
abstürzen (als Vorsichtsmaßnahme zur Vermeidung weiterer Schäden).
Das hat es ja offensichtlich bereits getan.


Die empfohlene Vorgehensweise ist:

1. alle Daten dumpen
-> http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html
evtl. muß man MySQL dazu mit--innodb_force_recovery=1 starten:
-> http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html

2. den betroffenen InnoDB-Tablespace neu anlegen
-> http://dev.mysql.com/doc/refman/5.0/en/adding-and-removing.h tml

3. die gedumpten Daten zurückspielen
-> http://dev.mysql.com/doc/refman/5.0/en/batch-commands.html

Je nach Datenmenge kann das natürlich ein paar Stunden dauern.
Und dann solltest du auch genau überlegen, wohin du den Dump legst
(hoffentlich nicht auf die kaputte Platte).

Wenn du unbedingt faul sein willst, kannst du natürlich nur die
betroffenen Tabellen dumpen/restoren. Allerdings kannst du dann
drauf warten, daß dir MySQL früher oder später wieder hochgeht.
Gegen kaputte Platten hilft nun mal nur Austauschen.

> Ich habe zuerst die 3 Betroffenen Tables gedumpt mit
> mysqldump user pw datenbank table >/name.sql
>
> Wenn ich nun a.) Diese zurueckspiele , aendert sich nichts Tables bleiben
> corrupt.
> Wenn ich nun b.) Die Table loesche, neu erstelle und dann das .sql file
> zurueckspielen will passiert nichts es kommt nur so etwas wie unten in
> dieser Message, und dann aus, kein Dumpen kein Vorgang nichts.

Irgendwas machst du nicht richtig. Btw: mit 'mysqldump' *erzeugt* man
Dumps. Wieder einlesen kann man die dann mit dem 'mysql' Programm.


XL

Re: Benötige Hilfe mit Corrupt Tables (Innodb)

am 11.12.2005 18:12:14 von Richard

danke axel

"Axel Schwenke" schrieb im Newsbeitrag
news:bqkhnd.gd8.ln@idefix.xl.local...
> "Richard" wrote:
>
>> Mein Problem jetzt, wie kann ich die 3 betroffenen Tables fixen, ohne das
>> ich auf ein Backup zurueckgreifen muss.
>
> Möglicherweise gar nicht. Wenn interne Datenstrukturen in InnoDBs
> Tablespace kaputt sind, kann InnoDB die betroffenen Tabellen
> möglicherweise auch nicht löschen/überschreiben. Auf jeden Fall wird
> MySQL beim Versuch, auf inkonsistente Datenstrukturen zu schreiben,
> abstürzen (als Vorsichtsmaßnahme zur Vermeidung weiterer Schäden).
> Das hat es ja offensichtlich bereits getan.
>
>
> Die empfohlene Vorgehensweise ist:
>
> 1. alle Daten dumpen
> -> http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html
> evtl. muß man MySQL dazu mit--innodb_force_recovery=1 starten:
> -> http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
>
> 2. den betroffenen InnoDB-Tablespace neu anlegen
> -> http://dev.mysql.com/doc/refman/5.0/en/adding-and-removing.h tml
>
> 3. die gedumpten Daten zurückspielen
> -> http://dev.mysql.com/doc/refman/5.0/en/batch-commands.html
>
> Je nach Datenmenge kann das natürlich ein paar Stunden dauern.
> Und dann solltest du auch genau überlegen, wohin du den Dump legst
> (hoffentlich nicht auf die kaputte Platte).
>
> Wenn du unbedingt faul sein willst, kannst du natürlich nur die
> betroffenen Tabellen dumpen/restoren. Allerdings kannst du dann
> drauf warten, daß dir MySQL früher oder später wieder hochgeht.
> Gegen kaputte Platten hilft nun mal nur Austauschen.
>
>> Ich habe zuerst die 3 Betroffenen Tables gedumpt mit
>> mysqldump user pw datenbank table >/name.sql
>>
>> Wenn ich nun a.) Diese zurueckspiele , aendert sich nichts Tables bleiben
>> corrupt.
>> Wenn ich nun b.) Die Table loesche, neu erstelle und dann das .sql file
>> zurueckspielen will passiert nichts es kommt nur so etwas wie unten in
>> dieser Message, und dann aus, kein Dumpen kein Vorgang nichts.
>
> Irgendwas machst du nicht richtig. Btw: mit 'mysqldump' *erzeugt* man
> Dumps. Wieder einlesen kann man die dann mit dem 'mysql' Programm.
>
>
> XL