简单记录一下遇到的innodb引发的mysql数据库崩溃问题的处理过程
一、问题排查
1、问题现象
数据库连不上,发现服务端没起来
2、终端排查
指令:sudo systemctl status mysql.service
结果:报错
指令:sudo systemctl start mysql.service
结果:失败
指令:
3、查看日志
日志位置:/var/log/masql/error.log
查看方法: sudo vi error.log 或 sudo gedit error.log
结果:发现innodb崩溃
二、强行启动
1、my.conf
位置:etc/mysql/my.cnf
用途:配置文件
2、innodb_force_recovery
1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。
当设置innodb_force_recovery大于0后,可以对标进行select、create、drop操作,但insert、update或者delete这类操作不允许执行。
3、修改并尝试启动
格式:
my.conf文件内添加:
[mysqld]
innodb_force_recovery = 1~6
逐步增大,直到成功启动mysql
修改指令:sudo vi/gedit my.cnf
启动命令:sudo systemctl start mysql.service
三、排除问题
1、备份数据库
mysqldump -uroot -ppassword databasename > databasename.sql
2、删除数据库
进入mysql:mysql -uroot -ppassword
查看数据库:show databases
删除数据库:drop databasename
3、无法通过指令删除时强制删除数据库
数据库一般位置:/var/lib/mysql/databasename
4、删除ib文件
备份后删除 ib_logfile0 ib_logfile1 ibdata1
位置 /var/lib/mysql
5、修改设定值
innodb_force_recovery 该为0或直接注释或删除
四、恢复数据
1、重启mysql
sudo systemctl start mysql.service
2、恢复数据
把备份的sql文件导回去