Maison  >  Article  >  base de données  >  Explication sur la façon de gérer le problème selon lequel mysql innodb ne démarre pas et ne peut pas être redémarré

Explication sur la façon de gérer le problème selon lequel mysql innodb ne démarre pas et ne peut pas être redémarré

jacklove
jackloveoriginal
2018-06-09 09:25:142212parcourir

L'ordinateur est tombé en panne pendant l'utilisation. Après le redémarrage, j'ai constaté que mysql n'avait pas démarré correctement. En regardant le journal des erreurs, j'ai découvert qu'il y avait un problème avec innodb qui empêchait le 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/mysql2016-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 insensitive2016-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 pages2016-04-23 22:08:38 3604 [Note] InnoDB: The InnoDB memory heap is disabled2016-04-23 22:08:38 3604 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins2016-04-23 22:08:38 3604 [Note] InnoDB: Memory barrier is not used2016-04-23 22:08:38 3604 [Note] InnoDB: Compressed tables use zlib 1.2.32016-04-23 22:08:38 3604 [Note] InnoDB: Using CPU crc32 instructions2016-04-23 22:08:38 3604 [Note] InnoDB: Initializing buffer pool, size = 128.0M2016-04-23 22:08:38 3604 [Note] InnoDB: Completed initialization of buffer pool2016-04-23 22:08:38 3604 [Note] InnoDB: Highest supported file format is Barracuda.2016-04-23 22:08:38 3604 [Note] InnoDB: Log scan progressed past the checkpoint lsn 689299334402016-04-23 22:08:38 3604 [Note] InnoDB: Database was not shutdown normally!2016-04-23 22:08:38 3604 [Note] InnoDB: Starting crash recovery.2016-04-23 22:08:38 3604 [Note] InnoDB: Reading tablespace information from the .ibd files...2016-04-23 22:08:38 3604 [ERROR] InnoDB: checksum mismatch in tablespace ./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: Page size:1024 Pages to analyze:642016-04-23 22:08:38 3604 [Note] InnoDB: Page size: 1024, Possible space_id count:02016-04-23 22:08:38 3604 [Note] InnoDB: Page size:2048 Pages to analyze:482016-04-23 22:08:38 3604 [Note] InnoDB: Page size: 2048, Possible space_id count:02016-04-23 22:08:38 3604 [Note] InnoDB: Page size:4096 Pages to analyze:242016-04-23 22:08:38 3604 [Note] InnoDB: Page size: 4096, Possible space_id count:02016-04-23 22:08:38 3604 [Note] InnoDB: Page size:8192 Pages to analyze:122016-04-23 22:08:38 3604 [Note] InnoDB: Page size: 8192, Possible space_id count:02016-04-23 22:08:38 3604 [Note] InnoDB: Page size:16384 Pages to analyze:62016-04-23 22:08:38 3604 [Note] InnoDB: VALID: space:2947354 page_no:3 page_size:163842016-04-23 22:08:38 3604 [Note] InnoDB: Page size: 16384, Possible space_id count:12016-04-23 22:08:38 3604 [Note] InnoDB: space_id:2947354, Number of pages matched: 1/1 (16384)2016-04-23 22:08:38 3604 [Note] InnoDB: Chosen space:29473542016-04-23 22:08:38 3604 [Note] InnoDB: Restoring page 0 of tablespace 29473542016-04-23 22:08:38 3604 [Warning] InnoDB: Doublewrite does not have page_no=0 of space: 29473542016-04-23 22:08:38 7fff79b9e300  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 ./test_user/user_recommend_code#P#pmax.ibdInnoDB: We do not continue the crash recovery, because the table may become
InnoDB: 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.

Solution

1 Si les données ne sont pas importantes ou s'il existe déjà une sauvegarde, il vous suffit de restaurer MySQL et de démarrer

.

Entrez le répertoire mysql, généralement : /usr/local/var/mysql/
Supprimez ib_logfile*
Supprimez ibdata*
Supprimez tous les répertoires physiques de la base de données (par exemple, si la base de données est test_db, exécutez rm -rf test_db)
Répétez le démarrage de mysql
reconstruisez la base de données ou utilisez la couverture de sauvegarde

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

vous pouvez utiliser le Paramètre innodb_force_recovery pour que mysqld ignore l'étape de récupération, démarre mysqld, exporte les données et reconstruit la base de données.

innodb_force_recovery peut être réglé sur 1-6, le plus grand nombre inclut l'impact de tous les nombres précédents

  1. (SRV_FORCE_IGNORE_CORRUPT) : Ignorer le détecté Page de corruption.

  2. (SRV_FORCE_NO_BACKGROUND) : Empêcher le thread principal de s'exécuter. Si le thread principal doit effectuer une opération de purge complète, cela provoquera un crash.

  3. (SRV_FORCE_NO_TRX_UNDO) : N'effectuez pas d'opération d'annulation de transaction.

  4. (SRV_FORCE_NO_IBUF_MERGE) : N'effectuez pas l'opération de fusion du tampon d'insertion.

  5. (SRV_FORCE_NO_UNDO_LOG_SCAN) : Sans vérifier le journal redo, le moteur de stockage InnoDB traitera les transactions non validées comme validées.

  6. (SRV_FORCE_NO_LOG_REDO) : N'effectuez pas d'opération de roll forward.

Ajouter
innodb_force_recovery = 6
innodb_purge_thread = 0

Redémarrer dans my.cnf (windows est my.ini) mysql

ne peut effectuer que des opérations sélectionner, créer, supprimer pour le moment, mais ne peut pas effectuer des opérations insérer, mettre à jour, supprimer
pour effectuer une exportation logique une fois terminée. , il va innodb_force_recovery=0, innodb_purge_threads=1, puis reconstruire la base de données, et enfin réimporter les données exportées

Cet article explique comment gérer l'échec de démarrage de mysql innodb et ne peut pas être redémarré, plus de contenu connexe Veuillez faire attention au site Web chinois php.

Recommandations associées :

Expliquez comment PHP obtient la date spécifiée

Explication détaillée de la façon dont PHP génère une classe RequestID unique

Comment vérifier la capacité des tables de base de données via MySQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn