MySQL “Unable to lock ./ibdata1, error: 35” 的解决
by z9g
问题的出现因为一次MySQL的非正常退出,MySQL正在执行一个耗时的查询导致用mysql-server stop一直等待,于是我在shell里面kill -9 mysql,再次启动mysql的时候报错,MySQL error log最后几行:
InnoDB: Unable to lock ./ibdata1, error: 35
InnoDB: Check that you do not already have another mysqld process
解决方法:
cd your-mysql-db-dir
mv ibdata1 ibdata1.bak
cp -a ibdata1.bak ibdata1
然后启动mysql ibdata1的lock问题得解,但是随之而来的是漫长的innodb的恢复,如果数据量大,恢复的时间会比较长。250+G的数据用了大概2个小时才恢复完, 这个时候不要去kill mysqlserver, 虽然在恢复的过程中还不能用客户端登录mysqlserver。
总结:这次问题的出现因为一次生硬的kill, 当出现MySQL因为有耗时的查询导致MySQL Server无法退出的时候, 应该进入用mysql的交互shell里面kill, 而不要直接在shell里面做kill.