Maison >base de données >tutoriel mysql >Comment résoudre le crash de panne de courant Mysql8

Comment résoudre le crash de panne de courant Mysql8

WBOY
WBOYavant
2023-05-29 13:20:041954parcourir

1. Présentation

Le serveur de base de données Mysql8 autonome a soudainement perdu de l'alimentation pendant le fonctionnement, provoquant le crash de la base de données et l'impossibilité de redémarrer.

Deuxièmement, trouvez la cause

Vérifiez le journal des erreurs d'exécution de MySQL : WIN-SOTMI68HRV6.err (dans le répertoire Data)

InnoDB : Fin du dump de page
InnoDB : La page peut être une page système
2023-02- 01T09 : 31:02.878917Z 0 [Avertissement] [MY-010915] [Serveur] Les modes SQL 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' et 'ERROR_FOR_DIVISION_BY_ZERO' doivent être utilisés avec le mode strict. Ils seront fusionnés avec le mode strict dans une prochaine version.
2023 -02-01T09:31:02.882631Z 0 [Système] [MY-010116] [Serveur] C:Program FilesMySQLMySQL Server 8.0binmysqld.exe (mysqld 8.0.23) démarrant en tant que processus 3496
2023-02-01T09:31 :02.923391 Z 1 [Système] [MY-013576] [InnoDB] L'initialisation d'InnoDB a démarré.
2023-02-01T09:31:05.964384Z 1 [ERREUR] [MY-011971] [InnoDB] Tablespace 'innodb_system' Page [page id : espace = 0, numéro de page = 5] Le numéro de séquence du journal 3275776865 est dans le futur ! Le numéro de séquence du journal système actuel 3197057036.
2023-02-01T09:31:05.966225Z 1 [ERREUR] [MY-011972] [InnoDB] Votre base de données est peut-être corrompue ou vous avez peut-être copié l'espace de table InnoDB mais pas les fichiers journaux InnoDB. Veuillez vous référer à http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html pour plus d'informations. à propos du forçage de la récupération.
2023-02-01T09:31:05.98

InnoDB : Fin du vidage de la page
InnoDB : La page peut être une page système
2023-02-01T11:03:39.767939Z 1 [ERREUR] [MY-011906 ] [ InnoDB] Corruption de la page de base de données sur le disque ou échec de lecture du fichier de la page [identifiant de la page : espace = 4294967278, numéro de page = 101]. Vous devrez peut-être récupérer à partir d'une sauvegarde.
len 16384 ; hex

Évidemment [ERREUR]. ] , le fichier disque est introuvable. À partir du journal ci-dessus, nous pouvons savoir qu'une erreur s'est produite dans la base de données et ne peut pas être redémarrée.

InnoDB utilise des sommes de contrôle pour protéger les données, en les stockant avec la page. Lorsque InnoDB lit à partir du disque, il calcule une somme de contrôle pour chaque page, puis la compare avec la somme de contrôle chargée sur le disque. Si les valeurs sont différentes, il se peut que quelque chose ne se soit pas bien passé. Pour éviter d'autres dommages logiques ou physiques, le serveur MySQL arrêtera InnoDB.

3. Solution

1. Comment découvrir la cause du dommage

Il n'y a pas de solution universelle. Certains problèmes matériels courants incluent une défaillance du disque physique ou de la mémoire, des lecteurs/contrôleurs corrompus et des erreurs dans le noyau du système d'exploitation. Voici quelques suggestions :

Sur les plates-formes Linux, parfois, la réinitialisation du cache des pages peut résoudre ce problème :

echo 2 > /proc/sys/vm/drop_caches

Vérifiez les journaux système pour détecter d'éventuelles pannes matérielles.
Si InnoDB plante à chaque fois sur une page spécifique, le plus souvent à cause d'une panne de disque physique : exécutez des diagnostics de disque détaillés pour votre système d'exploitation/matériel.
Si le crash est aléatoire et n'est pas répété pour la même requête, il peut s'agir d'un défaut de RAM : exécutez des diagnostics détaillés de la RAM.
Lorsque MySQL est arrêté, il est utile de vérifier le fichier InnoDB avec l'outil innochecksum.

作者这里故障原因是断电导致数据出现问题,只能重装Mysql。

2.如何从损坏中恢复

最重要的是执行详细的硬件诊断,以消除问题扩散的机会。如果操作系统I / O缓存是磁盘读损坏的原因,重置缓存或重新启动操作系统应有助于消除当前的问题,数据库可能会重新运作。
有时唯一的解决办法是在有效恢复模式下备份数据。

笔者后面尝试强制启动,可以启动Mysql,但是数据库只能读不能写,通过日志又找不到损坏的数据表,无奈,只能先备份数据库,然后重装Mysql。

修改数据库,一直报错:

running in read_only mode 1836

将mysql改为强制启动:

在my.ini中【mysqld】节点下加上

innodb_force_recovery=0

然后对数据库进行备份。
备份方式:

一、数据库备份

第一种:(cmd窗口使用)
在命令提示符用mysqldump命令行备份数据库。
命令格式
mysqldump -u用户名 -p 数据库名 > 保存名.sql
范例:

mysqldump -uroot -p dataname > d:\data.sql

(导出数据库dataname到data.sql文件)
提示输入密码时,输入该数据库用户名的密码。

第二种:指定导出备份编码

mysqldump -u root -p密码 --default-character-set=数据编码 数据库名称> data.sql

案例:

mysqldump -u root -p123456 --default-character-set=utf8 discuss_chi>d:/data.sql

mySQL数据库在windows环境下备份与恢复:

二,恢复数据库,一共二种方式。

第一种;定义还原编码类型(cmd窗使用)
定义编码导入:

mysql -u root -p --default-character-set=utf8 -f dataname<d:/dis.sql

如果乱码使用二进导入

mysql -u root -p --default-character-set=binary -f dataname<d:/dis.sql

第二种:
source 命令(mysql控制台窗口使用)
进入mysql数据库控制台,

如在运行中输入:mysql -u root -p

mysql>use databasename;

1、确定数据库默认编码,比如编码为gbk,将读入途径编码同样设为gbk,命令为:
set names gbk;(导入数据出现乱码的时候用平常不用)
2、然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source d:\data.sql;

备份后,重装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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer