Article ID: 6586, created on Jan 10, 2012, last review on Mar 31, 2016

  • Applies to:
  • Plesk

Kennzeichen

  1. Es wird folgende Fehlermeldung in Parallels Plesk Panel angezeigt:

    ERROR: PleskMainDBException
    MySQL query failed: Incorrect information in file: './psa/misc.frm'
    
  2. mysqldump und mysqlcheck schlagen fehl und es wird eine Fehlermeldung angezeigt, dass eine Tabelle nicht existiert (Sie sollten zur Überprüfung den MySQL-Administrator-Account nutzen):

    ~# mysqlcheck -uadmin -p****** db_example
    db_example.BackupTasks
    error    : Can't find file: 'BackupTasks.MYD' (errno: 2)
    
  3. Eine Tabelle kann mit der Anweisung "SELECT" nicht korrekt abgefragt werden:

    mysql> select * from db_example.misc;
    ERROR 1033 (HY000): Incorrect information in file: './db_example/misc.frm'
    
  4. Die Tabelle kann nicht repariert werden, weil die InnoDB-Engine keine Reparatur unterstützt.

    mysql> repair table misc;
    +-------------------------+--------+----------+---------------------------------------------------------+
    | Table                   | Op     | Msg_type | Msg_text                                                |
    +-------------------------+--------+----------+---------------------------------------------------------+
    | psa.APSApplicationItems | repair | note     | The storage engine for the table doesn't support repair |
    +-------------------------+--------+----------+---------------------------------------------------------+
    

Ursache

Viele InnoDB-Beschädigungen sind Hardware-bezogen. Fehlerhafte Seitenschreibvorgänge werden von Stromausfällen oder ungültigem Arbeitsspeicher verursacht. Das Problem kann aber auch hervorgerufen werden, wenn ein Network Attached Storage (NAS) verwendet und ihm InnoDB-Datenbanken zugewiesen werden.

Lösung

Es gibt mehrere Möglichkeiten, ein fehlgeschlagenes MySQL wiederherzustellen:

I. Forcieren einer InnoDB-Wiederherstellung

  1. Stoppen Sie mysqld und führen Sie ein Backup aller Dateien im Verzeichnis /var/lib/mysql/ durch:

    ~# /etc/init.d/mysqld stop
    ~# mkdir /root/mysql_backup
    ~# cp -r /var/lib/mysql/* /root/mysql_backup/
    
  2. Fügen Sie die Option innodb_force_recovery im Abschnitt [mysqld] in /etc/my.cnf hinzu. Diese Option ermöglicht Ihnen, mysqld zu starten und ein Datenbankabbild (Dump) zu erstellen.

    ~#/etc/my.cnf
    [mysqld]
    innodb_force_recovery = 4
    

    HINWEIS: Sie können den Wert der Option auf 5 oder 6 erhöhen, bis Sie ein brauchbares Abbild erhalten. Einzelheiten dazu finden Sie hier.

  3. Starten Sie den Dienst mysqld:

    ~# /etc/init.d/mysqld start
    
  4. Erstellen Sie ein Abbild aller Datenbanken:

    ~# mysqldump -uadmin -p`cat /etc/psa/.psa.shadow` -A > /root/dumpall.sql
    

    Falls das Abbild mit folgender Fehlermeldung fehlgeschlagen ist:

    Incorrect information in file: './psa/APSApplicationItems.frm' when using LOCK TABLES"`
    

    erhöhen Sie innodb_force_recovery und versuchen Sie erneut, die Datenbanken abzubilden. Sollte es Ihnen nicht möglich sein, ein Abbild der Datenbanken zu sichern, versuchen Sie es mit Methode II (Tabelleninhalt kopieren) oder III (von Backup wiederherstellen).

  5. Beenden Sie mysqld und entfernen Sie die beschädigten Daten:

    ~# /etc/init.d/mysqld stop
    ~# rm -rf /var/lib/mysql/*
    
  6. Entfernen Sie die Option innodb_force_recovery aus der Datei /etc/my.cnf und starten Sie mysqld:

    ~# /etc/init.d/mysqld start
    

    Hierdurch werden eine Hauptdatenbank "mysql" und eine InnoDB-Engine-Datenbank neu erstellt.

  7. Stellen Sie die Datenbanken aus dem Abbild wieder her:

    ~# mysql -uadmin -p`cat /etc/psa/.psa.shadow` < dumpall.sql
    

II. Kopieren des Tabelleninhalts

  1. Stoppen Sie mysqld und führen Sie ein Backup aller Dateien im Verzeichnis /var/lib/mysql/ durch:

    ~# /etc/init.d/mysqld stop
    ~# mkdir /root/mysql_backup
    ~# cp -r /var/lib/mysql/* /root/mysql_backup/
    
  2. Fügen Sie die Option innodb_force_recovery im Abschnitt [mysqld] in /etc/my.cnf hinzu. Diese Option ermöglicht Ihnen, mysqld zu starten und ein Datenbankabbild (Dump) zu erstellen.

    ~#/etc/my.cnf
    [mysqld]
    innodb_force_recovery = 1
    
  3. Versuchen Sie, eine Kopie zu erstellen:

    CREATE TABLE <neue_Tabelle> LIKE <beschädigte_Tabelle>;
    INSERT INTO <neue_Tabelle> SELECT * FROM <beschädigte_Tabelle>;
    
  4. Wurde sie erfolgreich erstellt, verwerfen Sie die beschädigte Tabelle und benennen die neue Tabelle um, sodass sie den Namen der alten hat.

    DROP TABLE <beschädigte_Tabelle>;
    RENAME TABLE <neue_Tabelle> TO <beschädigte_Tabelle>;
    

III. Wiederherstellen von Backup

Sollten die oben genannten Vorschläge nicht helfen, gibt es nur noch die Möglichkeit, die Datenbanken anhand von Backups wiederherzustellen.

Ein tägliches Backup der Parallels Plesk Panel Datenbank wird im Backupverzeichnis DUMP_D gespeichert:

~# ls -l /var/lib/psa/dumps
-rw------- 1 root   root   141960 Aug  8 01:03 mysql.daily.dump.0.gz
-rw------- 1 root   root   141925 Aug  7 01:03 mysql.daily.dump.1.gz

Verwenden Sie den nachfolgenden Befehl, um die Datenbank aus dem letzten Backup mysql.daily.dump.0.gz wiederherzustellen:

~# zcat /var/lib/psa/dumps/mysql.daily.dump.0.gz | mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa

HINWEIS: Beim Wiederherstellen der Datenbanken können Zeitüberschreitungen auftreten. Fügen Sie die Option wait_timeout in die Datei /etc/my.cnf ein und starten Sie den Dienst mysgld neu:

/etc/my.cnf
[mysqld]
wait_timeout = 1800
~# /etc/init.d/mysqld restart

56797cefb1efc9130f7c48a7d1db0f0c a914db3fdc7a53ddcfd1b2db8f5a1b9c caea8340e2d186a540518d08602aa065 e0aff7830fa22f92062ee4db78133079 400e18f6ede9f8be5575a475d2d6b0a6

Email subscription for changes to this article
Save as PDF