开篇介绍,大致两部分内容:
- ibdata1文件损坏导致MySQL崩溃无法启动
- 重装MySQL时忘记清空datadir和配置文件夹导致还是无法启动
===============================================================================================================
在Ubuntu升级后 (18.04 to 22.04),MySQL突然不好用了(MySQL Version 8.0.36)。
Systemctl status mysql 或者 service mysql status 始终状态都是显示 inactive,mysql -u[xxx] -p 也无法进入。
直接去看 error.log 发现提示找不到数据文件夹 /var/lib/mysql,修改了/etc/mysql/mysql.cnf里面的datadir之后可以找到datadir了,但是报错找不到ibdata1这个文件,但是确实这个文件在文件夹当中是存在的,一想datadir一直都是使用的别的位置/mnt/mysql/ibdata1,我直接把/mnt/mysql/ibdata1拿过来覆盖发现还是不对,之后无论如何切换路径都修复不了了,始终都是这个错误,最后找不到好的办法了,被迫无奈只能重装,还好我几乎所有的表都是MYISAM的表,把所有的 .frm .MYI .MYD文件转移好,然后开始删除mysql
删除MySQL:
- sudo apt remove --purge mysql
- sudo apt autoremove
- sudo apt autoclean
重装并启动MySQL:
- sudo apt update
- sudo apt install mysql
- sudo systemctl start mysql.service
依然是inactive,然后兜兜转转半天才反应过来 /var/lib/mysql 没有清空,systemctl stop mysql.service 之后 然后直接rm -rf /var/lib/mysql 整个文件夹,然后直接再删除重装来一遍后终于可以成功启动,停掉服务,然后把之前备份好的.frm .MYI .MYD拿过来启动MySQL,终于成功了
===============================================================================================================
作为菜鸟的心得小结:
- 网上找到的中文教程都是互相搬运,很难找到好的方法,去stackoverflow因为英语水平有限没有看太多,简单看了几个也都无效,所以没办法只能选择重装,实在是无奈之举
- 我们的数据库作为一个非高并发用途,多读少写的库来说,MYISAM确实相比有很大的优势,尤其是在恢复这块真的很方便,.frm .MYI .MYD三个文件都在就能恢复
- 最好是有一个All Schema Slave从库,一旦出事儿找不到解决方案时真的会好很多
- 定时备份是一个好习惯,也应该是必须的