mysql启动报错的原因常见的有一下几种:

   1、数据所在分区满了

   2、pid所在目录mysql用户没有写权限

   3、存储引擎为innodb引擎,这个时候启动的时候需要恢复所有的操作(select,create,drop,insert。update,delete),当不能有效的执行恢复操作的时候,mysql启动报错


    早上来上班的时候,被通知整栋大楼要停电,想了一下,公司机房还放了几台测试机,如果突然断电的话,会导致测试机中的虚拟机不可用,赶紧一台一台关机吧,其中有一台虚拟机上装着mysql,先进去把mysql关掉吧,避免等下开机启动mysql报错,然后依次关掉所有的虚拟机,最后宿主机

   最终断电了,来电之后,赶紧起机器 ,一切顺利,但是到mysql的时候

mysql启动报错

# service mysql start
Starting MySQL.............. ERROR! The server quit without updating PID file (/mydata/data/mysql..pid).[失败]

   我了个去,最不愿意看到的事还是发生了,一步一步检测吧

1、检查磁盘情况

# df -h
文件系统             容量  已用  可用已用%% 挂载点
/dev/mapper/VolGroup-lv_root     50G   11G   36G  24% /
tmpfs                                               7.8G     0 7.8G   0% /dev/shm
/dev/xvda1                                      485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home   428G   84G  323G  21% /home

磁盘空间还有很多,排除

2、检查pid文件是否存在,并查看其所在目录的权限

# cat /etc/my.cnf | grep pid
pid-file = /home/data/log/mysql.pid

去相应目录查看

wKioL1RXVMWgCixUAATrePiqnFI716.jpg

恩是有权限的,等等,我的pid文件呢?也就是说在启动的时候,mysql没有创建pid文件

手动创建一个试试

touch mysql.pid

更改其属主属组

chown    mysql.mysql mysql.pid

再启动,还报错

排除pid的问题

3、由配置文件可以,mysql存储引擎中有innodb,可能属于第三种情况

在配置文件中添加如下参数,然后启动

innodb_force_recovery = 4

启动ok

 

注:

   启动成功之后, 把配置文件中该选项注释掉,然后重启数据库,要不然,很多操作都不支持了

 

innodb_force_recovery 参数含义如下

   默认为0 表示当需要恢复时,执行所有的恢复操作

   可以设置为1-6,当参数大于0的时候,可以对表进行slect,create,drop操作,但insert,update或者delect这类操作室不允许的

   1 :忽略检查到的corrupt页
   2 :阻止主线程的运行,如主线程需要执行full purge的操作,会导致crash
   3 :不执行事务回滚操作
   4 :不执行插入缓冲的合并操作
   5 :不查看重做日志,innodb存储引擎会将未提交的事务视为已提交
   6 :不执行前滚的操作