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