Geschrieben von Beat Rubischon (Link) am
Mittwoch, 12. Dezember 2007, 09:25
aus dem *adrenalin-pur* dept.
Während einem mysqldump schlich sich diese Meldung in die Syslog:
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 9049.
InnoDB: You may have to recover from a backup.
Der Weg zurück zur laufenden Datenbank im Text.
Den Server herunternehmen und den Tipp von MySQL befolgen, der unter dem Link in den weiteren Messages in der Syslog notiert ist:
# joe /etc/mysql/my.cnf
[mysqld]
#
# For recovery
innodb_force_recovery = 4
^K^X
DB Server manuell starten, damit die Messages nicht aus der Syslog gepfriemelt werden müssen:
# mysqld
Nun alle InnoDB basierenden Tabellen finden. Dafür über alle Datenbanken folgendes Kommando absetzen:
mysql> show table status from database;
Alle InnoDB Tabellen dumpen. Jede individuell, um den Uebeltäter mit dem defekten Block zu finden:
# mysqldump database table > database-table.sql
Die defekte Tabelle führt wahrscheinlich zu einem Crash des InnoDB Backends im mysqld und muss ohne Daten gedumpt werden:
# mysqladmim shutdown
# mysqld (in einem anderen Fenster)
# mysqldump -d database table > database-table.sql
Nun die DB wieder herunternehmen. Vieleicht noch ein Backup machen, bevor die Daten gelöscht werden:
# mysqladmin shutdown
# cd /var/lib/mysql
# tar cvf /home/db.tar .
# rm ib*
Wahrscheinlich sind auch einige MyISAM Tabellen defekt. Diese lassen sich zum Glück einfach reparieren:
# myisamchk -f */*.MYI
Nun den Server wieder starten:
# /etc/init.d/mysql start
und die Dumps wieder einspielen:
# mysql database < database-table.sql
InnoDB Korruptionen werden leider nicht an den Client weitergegeben. Entsprechend logt der mysqldump, den ich täglich mache, keine solchen Fehler. Ich habe ihn mit einem grep über die Syslog erweitert, um zukünftig solche Fehler möglichst zeitig zu entdecken:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
umask 0077
DIR=/var/backups/`date +%Y%m%d`
mkdir -p $DIR
mysqldump -Aa > $DIR/mysql.dump
grep mysqld /var/log/syslog
Und jetzt einen Kaffee!
Permalink
|