本人出现该问题的环境是xampp,异常关机,再次在xampp控制面板启动mysql出现该问题。出现问题折腾数据库之前,先备份数据,将mysql目录下的data拷贝到其他地方,这很重要。
然后开始折腾。
查资料,会发现很多坑人的方案,比如很多博文都会扯"/xampp/mysql/backup/中所有文件复制并覆盖 /xampp/mysql/data/中的所有文件,重启xampp"
这么做是不靠谱的,如果你的数据没有备份可能就惨了。先看下backup里的文件是什么时候创建的,几年前的数据你确定也要这么做?如果backup的时间接近,倒是可以试试。
还有尝试恢复的方案,参考https://stackoverflow.com/questions/56847804/xampp-mysql-service-crash-after-reboot
和https://forums.mysql.com/read.php?10,652134,652135#msg-652135
答案原文如下
Open shell from from control panel and start mysql with this command:
mysqld ---console ---skip-grant-tables ---skip-external-locking
Open another shell from control panel and repair database with this command:
mysqlcheck -r --databases mysql --use-frm
Stop mysql, close shells and restart mysql normally.
还有修改mysql配置文件,让数据库启动尝试恢复的。在my.ini配置文件[mysqld]下添加如下配置,再重新启动的。比如这篇文章https://blog.csdn.net/wxc20062006/article/details/78962738
innodb_force_recovery=1
innodb_purge_threads = 0
上面的方案都试过,都没有成功。看到这篇文章https://blog.51cto.com/u_16213603/11249279
,决定采用借尸还魂的方案。"魂"是指mysql目录下data,"尸"指同版本的mysql包。
我的做法是,先将xampp下的mysql目录直接更名,然后从一个从官网下载的同版本xampp中直接将mysql拷贝到我部署的xampp。这个mysql肯定是能够启动的。将备份的data目录下的数据库文件夹、ibdata1文件拷贝到部署的xampp/mysql/data下(干净的mysql/data下其他已有的目录文件就别拷贝了,比如data下的mysql目录,我们将自己创建的数据库数据拷贝到干净的mysql/data下)。xampp控制面板启动mysql,成功!默认没有密码,改个密码就行了。