Heim >Datenbank >MySQL-Tutorial >Detaillierte Erläuterung der Beschädigung der MySQL-Tabellendatendatei, die dazu führt, dass die Datenbank nicht gestartet werden kann
1. Problemprotokoll
2017-08-31 14:18:05 4122 [Note] InnoDB: Database was not shutdown normally! 2017-08-31 14:18:05 4122 [Note] InnoDB: Starting crash recovery. 2017-08-31 14:18:05 4122 [Note] InnoDB: Reading tablespace information from the .ibd files... 2017-08-31 14:18:05 4122 [ERROR] InnoDB: Attempted to open a previously opened tablespace. Previous tablespace dev/tb_test uses spac e ID: 1 at filepath: ./dev/tb_test.ibd. Cannot open tablespace mysql/innodb_table_stats which uses space ID: 1 at filepath: ./mysql/ innodb_table_stats.ibd 2017-08-31 14:18:05 2ad861898590 InnoDB: Operating system error number 2 in a file operation. InnoDB: The error means the system cannot find the path specified. InnoDB: If you are installing InnoDB, remember that you must create InnoDB: directories yourself, InnoDB does not create them. InnoDB: Error: could not open single-table tablespace file ./mysql/innodb_table_stats.ibd InnoDB: We do not continue the crash recovery, because the table may becomeInnoDB: corrupt if we cannot apply the log records in the InnoDB log to it. InnoDB: To fix the problem and start mysqld: InnoDB: 1) If there is a permission problem in the file and mysqld cannot InnoDB: open the file, you should modify the permissions. InnoDB: 2) If the table is not needed, or you can restore it from a backup, InnoDB: then you can remove the .ibd file, and InnoDB will do a normal InnoDB: crash recovery and ignore that table. InnoDB: 3) If the file system or the disk is broken, and you cannot remove InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf InnoDB: and force InnoDB to continue crash recovery here. 150126 14:18:06 mysqld_safe mysqld from pid file /home/mysql/mysql_app/dbdata/liuyazhuang136.pid ended
Zur Gruppe [mysqld] hinzufügen:
innodb_force_recovery=6
Erklärung des Parameters Innodb_force_recovery:
innodb_force_recovery beeinflusst den Wiederherstellungsstatus der gesamten InnoDB-Speicher-Engine. Der Standardwert ist 0, was bedeutet, dass alle Wiederherstellungsvorgänge durchgeführt werden, wenn eine Wiederherstellung erforderlich ist.
Wenn effektive Wiederherstellungsvorgänge nicht durchgeführt werden können, kann es sein, dass MySQL nicht startet und ein Fehlerprotokoll aufgezeichnet wird.
innodb_force_recovery kann auf 1-6 eingestellt werden, die größere Zahl beinhaltet die Auswirkungen aller vorherigen Zahlen.
Wenn der Einstellungsparameterwert größer als 0 ist, können Sie Auswahl-, Erstellungs- und Löschvorgänge für die Tabelle ausführen, Vorgänge wie Einfügen, Aktualisieren oder Löschen sind jedoch nicht zulässig.
1(SRV_FORCE_IGNORE_CORRUPT): Ignorieren Sie die erkannte beschädigte Seite
2(SRV_FORCE_NO_BACKGROUND): Verhindern Sie die Ausführung des Hauptthreads. Wenn der Hauptthread einen vollständigen Löschvorgang durchführen muss, führt dies zu einem Absturz
3( SRV_FORCE_NO_TRX_UNDO): Transaktions-Rollback-Vorgang nicht ausführen.
4(SRV_FORCE_NO_IBUF_MERGE): Führen Sie den Zusammenführungsvorgang des Einfügepuffers nicht durch.
5(SRV_FORCE_NO_UNDO_LOG_SCAN): Ohne Überprüfung des Redo-Logs behandelt die InnoDB-Speicher-Engine nicht festgeschriebene Transaktionen als festgeschrieben.
6(SRV_FORCE_NO_LOG_REDO): Führen Sie keinen Rollforward-Vorgang durch.
$mysqldump -h 192.168.209.136 -uroot -p dev > /home/mysql/dev.sql
$mysql -h 192.168.209.136 -uroot -p mysql> drop database dev; ERROR 1051 (42S02): Unknown table 'dev.tb_test'
Löschen Sie die frm- und ibd-Dateien, die tb_test entsprechen
mysql> drop database dev; Query OK, 0 rows affected (0.00 sec)
mysql> create database dev; Query OK, 1 row affected (0.03 sec)
5. Entfernen Sie den Parameter innodb_force_recovery
Nachdem Sie die zuvor festgelegten Parameter entfernt haben, starten Sie die Datenbank neu
##innodb_force_recovery=6
[mysql@liuyazhuang136 dev]$ mysql -h 192.168.209.136 -uroot -pmysql dev</home/mysql/dev.sql Warning: Using a password on the command line interface can be insecure. ERROR 1050 (42S01) at line 25: Table '`dev`.`tb_test`' already exists
. Dies liegt daran, dass die Datenbank nach dem Entfernen des Parameters innodb_force_recovery einen Rollback-Vorgang durchführt und die entsprechende ibd-Datei generiert muss gelöscht werden
Löschen und dann erneut importieren
[mysql@liuyazhuang136 dev]$ mysql -h 192.168.209.136 -uroot -pmysql dev</home/mysql/dev.sql
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Beschädigung der MySQL-Tabellendatendatei, die dazu führt, dass die Datenbank nicht gestartet werden kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!