记录windows蓝屏,强制重启后导致windows上虚拟机docker中的mysql镜像坏掉了

场景描述:

日常开发学习时,我都是用一个笔记本,项目采用前后端分离的微服务架构,中间件nacos在window上部署运行,mysql和redis都是部署在windows虚拟机的docker中,大量的进程给电脑内存干崩了,最后导致蓝屏,没办法只能强制重启。

解决思路:

1、重启后再次启动项目时发现nacos启不来,原因是数据库启不来(高版本nacos启动时需要读取数据库配置)。

2、mysql是在docker中,先去看docker的启动状态(sudo systemctl status docker),发现正常启动,再看所有容器状态(sudo docker ps -a),发现redis正常,mysql未启动。

3、启动mysql(sudo  docker start mysql)但发现一直启动不成功,只能查看docker中mysql容器日志(sudo docker logs 容器id),发现有两行错误,大概意思是存储引擎可能已经损坏。麻烦了!!!

4、只能在docker中重新安装mysql镜像,但卸载前一定要先备份好原来的数据,容器都起不来了,进不去数据库备份个毛?其实可以强制启动容器,在数据库的配置文件my.cnf的[mysqld]组里添加一行innodb_force_recovery = 1,意思就是暴力恢复innodb存储引擎,就可以重新启动了,但如果设置这一行,对数据库的增删改查都做了限制,所以这行起到让你备份的作用,赶紧把所有库数据都备份一下。参考【记一次Msyql崩溃导致无法启动-腾讯云开发者社区-腾讯云 (tencent.com)】

5、接下来就是要卸载mysql镜像了,重新安装后查看镜像(sudo docker images)发现安装时间不是当前,还是损坏前的安装时间,咋回事?其实是镜像缓存的原因,使用命令docker system prune -a --volumes直接清除所有缓存(包括容器缓存 docker container prune、镜像缓存 docker image prune -a、数据卷缓存 docker volume prune、网络缓存 docker network prune)。

6、然后再重新安装mysql镜像,发现还是那样,其实还要删除启动mysql容器时端口映射产生的相关文件夹(rm -rf mysql),然后重新运行mysql容器(sudo docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7)。

7、最后发现启动成功了,果不其然,数据库干干净净,把刚刚备份数据还原到当前库中,继续写代码 /(ㄒoㄒ)/~~

你可能感兴趣的:(docker,容器,运维)