mysql启动报错的原因常见的有一下几种:
1、数据所在分区满了
2、pid所在目录mysql用户没有写权限
3、存储引擎为innodb引擎,这个时候启动的时候需要恢复所有的操作(select,create,drop,insert。update,delete),当不能有效的执行恢复操作的时候,mysql启动报错
早上来上班的时候,被通知整栋大楼要停电,想了一下,公司机房还放了几台测试机,如果突然断电的话,会导致测试机中的虚拟机不可用,赶紧一台一台关机吧,其中有一台虚拟机上装着mysql,先进去把mysql关掉吧,避免等下开机启动mysql报错,然后依次关掉所有的虚拟机,最后宿主机
最终断电了,来电之后,赶紧起机器 ,一切顺利,但是到mysql的时候
mysql启动报错
# service mysql startStarting 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 pidpid-file = /home/data/log/mysql.pid
去相应目录查看
恩是有权限的,等等,我的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 :不执行前滚的操作