English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Solution pour le échec du démarrage de la base de données MySQL innodb et impossibilité de redémarrer

Présentation du problème

L'ordinateur s'est bloqué pendant l'utilisation, après redémarrage, j'ai découvert que MySQL n'avait pas démarré avec succès. En regardant le journal des erreurs, j'ai découvert que le problème venait d'innodb, ce qui a causé l'échec du démarrage de MySQL.

Journal des erreurs

$ mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/fdipzonedeMacBook-Air.local.pid).
22:08:37 mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
2016-04-23 22:08:38 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-04-23 22:08:38 0 [Note] /usr/local/Cellar/mysql/5.6.24/bin/mysqld (mysqld 5.6.24) starting as process 3604 ...
2016-04-23 22:08:38 3604 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive
2016-04-23 22:08:38 3604 [Note] Plugin 'FEDERATED' is disabled.
2016-04-23 22:08:38 3604 [Note] InnoDB: Using atomics to ref count buffer pool pages
2016-04-23 22:08:38 3604 [Note] InnoDB: The InnoDB memory heap is disabled
2016-04-23 22:08:38 3604 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-04-23 22:08:38 3604 [Note] InnoDB: Memory barrier is not used
2016-04-23 22:08:38 3604 [Note] InnoDB: Compressed tables use zlib 1.2.3
2016-04-23 22:08:38 3604 [Note] InnoDB: Using CPU crc32 instructions
2016-04-23 22:08:38 3604 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-04-23 22:08:38 3604 [Note] InnoDB: Completed initialization of buffer pool
2016-04-23 22:08:38 3604 [Note] InnoDB: Highest supported file format is Barracuda.
2016-04-23 22:08:38 3604 [Note] InnoDB: L'analyse des journaux a progressé au-delà du lsn du point de contrôle. 68929933440
2016-04-23 22:08:38 3604 [Note] InnoDB: La base de données n'a pas été arrêtée normalement !
2016-04-23 22:08:38 3604 [Note] InnoDB: Démarrage de la récupération après crash.
2016-04-23 22:08:38 3604 [Note] InnoDB: Lecture des informations de l'espace de données à partir des fichiers .ibd...
2016-04-23 22:08:38 3604 [ERREUR] InnoDB: Mismatch de checksum dans l'espace de données ./test_user/user_recommend_code#P#pmax.ibd (table test_user/user_recommend_code#P#pmax)
2016-04-23 22:08:38 3604 [Note] InnoDB: Taille de la page:1024 Pages à analyser:64
2016-04-23 22:08:38 3604 [Note] InnoDB: Taille de la page: 1024, Compte possible de space_id:0
2016-04-23 22:08:38 3604 [Note] InnoDB: Taille de la page:2048 Pages à analyser:48
2016-04-23 22:08:38 3604 [Note] InnoDB: Taille de la page: 2048, Compte possible de space_id:0
2016-04-23 22:08:38 3604 [Note] InnoDB: Taille de la page:4096 Pages à analyser:24
2016-04-23 22:08:38 3604 [Note] InnoDB: Taille de la page: 4096, Compte possible de space_id:0
2016-04-23 22:08:38 3604 [Note] InnoDB: Taille de la page:8192 Pages à analyser:12
2016-04-23 22:08:38 3604 [Note] InnoDB: Taille de la page: 8192, Compte possible de space_id:0
2016-04-23 22:08:38 3604 [Note] InnoDB: Taille de la page:16384 Pages à analyser:6
2016-04-23 22:08:38 3604 [Note] InnoDB: VALID: espace:2947354 page_no:3 page_size:16384
2016-04-23 22:08:38 3604 [Note] InnoDB: Taille de la page: 16384, Compte possible de space_id:1
2016-04-23 22:08:38 3604 [Note] InnoDB: space_id:2947354, Nombre de pages correspondantes: 1/1 (16384)
2016-04-23 22:08:38 3604 [Note] InnoDB: Espace choisi:2947354
2016-04-23 22:08:38 3604 [Note] InnoDB: Restauration de la page 0 de l'espace de données 2947354
2016-04-23 22:08:38 3604 [Avertissement] InnoDB: Le doubleécriture n'a pas de page_no=0 dans l'espace: 2947354
2016-04-23 22:08:38 7fff79b9e300 InnoDB: Numéro d'erreur du système d'exploitation 2 dans une opération de fichier.
InnoDB: L'erreur signifie que le système ne peut pas trouver le chemin spécifié.
InnoDB: Si vous installez InnoDB, souvenez-vous que vous devez créer
InnoDB: Vous devez créer les répertoires vous-même, InnoDB ne les crée pas.
InnoDB : Erreur : impossible d'ouvrir en simple-fichier de tablespace ./test_user/user_recommend_code#P#pmax.ibd
InnoDB : Nous ne continuons pas la récupération de crash car la table pourrait devenir
InnoDB : corrompu si nous ne pouvons pas appliquer les enregistrements de journal dans le journal InnoDB à lui.
InnoDB : Pour résoudre le problème et démarrer mysqld :
InnoDB : 1) Si il y a un problème de permission dans le fichier et que mysqld ne peut pas
InnoDB : ouvrir le fichier, vous devriez modifier les permissions.
InnoDB : 2) Si la table n'est pas nécessaire ou que vous pouvez la restaurer à partir d'une sauvegarde,
InnoDB : puis vous pouvez supprimer le fichier .ibd et InnoDB le traitera normalement
InnoDB : récupération de crash et ignorer cette table.
InnoDB : 3) Si le système de fichiers ou le disque est endommagé et vous ne pouvez pas supprimer
InnoDB : le fichier .ibd, vous pouvez définir innodb_force_recovery > 0 dans my.cnf
InnoDB : et forcez InnoDB à continuer la récupération de crash ici.

Solution

1.Si les données ne sont pas importantes ou si elles sont déjà en backup, il suffit de restaurer le démarrage mysql

Entrer dans le répertoire mysql, généralement : /usr/local/var/mysql/

Supprimer ib_logfile*

Supprimer ibdata*

Supprimer tous les répertoires physiques de bases de données (par exemple, si la base de données est test_db, exécutez rm -rf test_db)

Redémarrez mysql

Rétablissez la base de données ou utilisez la sauvegarde pour remplacer

2. Si les données sont importantes et qu'il n'y a pas de sauvegarde

Vous pouvez utiliser le paramètre innodb_force_recovery pour faire sauter les étapes de récupération de mysqld, démarrez mysqld, exportez les données puis reconstruisez la base de données.

innodb_force_recovery peut être réglé sur1-6, les grands nombres incluent l'effet de tous les nombres précédents

     1, (SRV_FORCE_IGNORE_CORRUPT) : ignorer les pages corrompues détectées.

     2, (SRV_FORCE_NO_BACKGROUND) : empêcher le fonctionnement du fil principal, comme si le fil principal devait exécuter l'opération full purge, cela entraînerait un crash.

     3, (SRV_FORCE_NO_TRX_UNDO) : ne pas exécuter l'opération de rollback de transaction.

     4, (SRV_FORCE_NO_IBUF_MERGE) : ne pas exécuter l'opération de fusion de tampon d'insertion.

     5, (SRV_FORCE_NO_UNDO_LOG_SCAN) : ne pas consulter le journal de redémarrage, l'engine de stockage InnoDB considérera les transactions non soumises comme soumises.

     6, (SRV_FORCE_NO_LOG_REDO) : ne pas exécuter l'opération de redémarrage.

Ajoutez à my.cnf (my.ini pour Windows)

innodb_force_recovery = 6 
innodb_purge_thread = 0

Redémarrez mysql

À ce moment-là, seules les opérations select, create, drop peuvent être exécutées, mais les opérations insert, update, delete ne peuvent pas être exécutées

Exécutez l'exportation logique, après cela, mettez innodb_force_recovery=0, innodb_purge_threads=1ensuite, reconstruisez la base de données, puis importez à nouveau les données exportées

Résumé

Ceci est le contenu intégral de cet article, j'espère qu'il pourra aider les utilisateurs à apprendre ou à utiliser mysql. Si vous avez des questions, vous pouvez laisser des commentaires pour échanger. Merci du soutien de la communauté du tutoriel de cri.

Vous pourriez aussi aimer