问题复现
今早打开虚拟机发现打不开了,根据链接解决了。可是docker开启nacos容器后发现容器正常启动,网页却访问不了。使用docker ps命令查看如下,发现所有容器都正常启动。
使用find / -name “start.out” 找到其详细日志文件的所在路径。
使用cat /data/soft/nacos/logs/start.out 命令查看详情信息,也可以加上过滤字段快速定位原因cat /data/soft/nacos/logs/start.out | grep "Error"或“Falied”。可以看到是连接mysql出现了问题。
使用docker logs mysql 查看mysql报错信息,显示error.log日志文件权限不对,而且mysql的data文件存在无效问题。找到对应error.log文件查看,发现是Innodb日志表损坏了。想起来上次关机好像忘关虚拟机了同时项目也运行着,一关机第二天开机就出问题了,所以还是要合理关机,把虚拟机和项目都停掉再关。
解决办法
mysql容器启动不了,Innodb日志表损坏,考虑跳过恢复步骤,具体操作如下。
停用mysql
docker stop mysql
查找my.cnf路径
find / -name "my.cnf"
在my.cnf中的[mysqld]中添加:
innodb_force_recovery = 6
innodb_purge_threads = 1
启动mysql
docker start mysql
将所有数据库导出为sql
docker exec -it mysql mysqldump -uroot -pmysql --all-databases > /home/all.sql
停止mysql。然后把之前的跳过恢复的配置还原。
返回上一级目录把与conf同级的data文件夹删掉。注意备份。
继续启动mysql,它会自动新生成一个data文件夹。将all.sql复制到mysql容器中。
docker cp /home/all.sql mysql:/home/all.sql
进入mysql容器。
docker exec -it mysql bash
输入账号密码进入mysql。
mysql -uroot -pmysql
然后执行之前的all.sql,重新再启动mysql,重新启动docker服务即可。
source /home/all.sql