MySQL不断崩溃:InnoDB:无法锁定./ibdata1,错误:11


43

我有一个简单的Web服务器(Debian 6.0 x86,DirectAdmin,具有1 GB的内存和10 GB的可用空间,mySQl版本5.5.9),但是mySQL服务器不断崩溃,我需要杀死所有mySQL进程才能重新启动它再次。

/var/log/mysql-error.log 输出:

130210 21:04:26 InnoDB: Using Linux native AIO
130210 21:04:34 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:05:42 InnoDB: Completed initialization of buffer pool
130210 21:05:48 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:06:22 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:06:27 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:06:29 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:07:22 InnoDB: Completed initialization of buffer pool
130210 21:07:51 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:08:33 InnoDB: Completed initialization of buffer pool
130210 21:12:03 [Note] Plugin 'FEDERATED' is disabled.
130210 21:12:47 InnoDB: The InnoDB memory heap is disabled
130210 21:12:47 InnoDB: Mutexes and rw_locks use InnoDB's own implementation
130210 21:12:47 InnoDB: Compressed tables use zlib 1.2.3
130210 21:12:47 InnoDB: Using Linux native AIO
130210 21:13:11 InnoDB: highest supported file format is Barracuda.
130210 21:13:23 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
130210 21:14:05  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
130210 21:17:53  InnoDB: Unable to open the first data file
InnoDB: Error in opening ./ibdata1
130210 21:17:53  InnoDB: Operating system error number 11 in a file operation.

我在这里的mySQL网站上找到了一个主题,但是没有解决方案。

有任何想法吗?


这是哪个版本的MySQL?
迈克尔·汉普顿

我不明白-日志文件的这一部分讲述的是MySQL启动问题,而不是错误原因。最好的办法是消除问题的根源。
2013年

@MichaelHampton帖子已被编辑(mySQL版本5.5.9并增加了日志)。
Devator

1
在启动之前,您是否检查了没有运行的mysqld?怎么样?
symcbean 2013年

Answers:



28

使用Ubuntu 14.04。我尝试通过重新启动时遇到此问题

/etc/init.d/mysql restart

试一试

service mysql restart 

1
谢谢,它有所帮助。但为什么?
也是


@too,如果您同时具有旧式的init.d脚本作业的upstart配置,则必须使用service job start,否则,如果您使用init.d脚本启动它,则Upstart将不知道它,并且它可能会尝试启动另一个实例。(至少MySQL的默认初始化脚本就是这种情况。)
Wireman

@wireman:解释了为什么其他包(包括结)(DNS服务器)也有类似问题。他们何时决定强制执行?我认为/etc/init.d更好,因为它允许shell完成,从而使用户不必进行过多的键入操作。进步到-1的力量:)
也是

@too Bash选项卡补全是可自定义的。没有任何方便的Ubuntu,但似乎没人会想到制表符补全的service名字,这很奇怪。也许通过他们的错误跟踪器向Canonical提交功能请求?
CVn

18

导致此问题的最常见原因是尝试在MySQL已经运行时启动它。

要解决该问题,请终止所有正在运行的MySQL实例,然后使用常规启动脚本(例如)重新启动它service mysql start

使用发行版打包的版本时,请勿尝试手动启动MySQL,除非您已准备好遭受痛苦。


however the mySQL server keeps crashing-我不重启MySQL。它只是崩溃了,此后我确实需要重新启动它。;-)
Devator

@MichaelHampton您能否提供有关“痛苦世界”和“手动启动MySQL”的更多信息?谢谢)
Serge Kvashnin

11

复制原始文件(ibdata1,ib_logfile0,ib_logfile1 ...)。

mv ibdata1 ibdata1.bak 
cp -a ibdata1.bak ibdata1

http://cglreport.zhenhua.info/2008/08/mysql-error-unable-to-lock-ibdata1.html


神奇地帮助了我。
nils petersohn 2015年

cp -a是什么意思?我已经读过手册页
Ilja,2015年

2
非常感谢,它有所帮助。但为什么?
DaviAragao

在docker容器中运行的数据库重启失败后,我遇到了这个问题。我正在做一个有根据的猜测,以了解这为什么起作用,并且是一些元数据存储在文件中。移动并将其复制到原始位置会删除确定其已锁定的元数据。-a操作在复制期间维护文件属性,包括SELinux相关属性,但不保留元数据。
JDL

2

这帮助我解决了这个问题:

删除所有ibdata文件,然后让mysql创建它们。

停止mysql:

service mysql stop

转到mysql库:

cd /var/lib/mysql/

将innodb文件移动到需要的地方:

mv ib* /root/

启动mysql:

service mysql start

滚动浏览有用的答案,我认为这肯定会奏效,因为该错误抱怨无法锁定该文件。移动后,mysql确实重新创建了它们,但仍然在抱怨……疯了!
凯尔·伯凯特

1

来自谷歌搜索同一重复错误,但错误代码为13(InnoDB: Unable to lock ./ibdata1, error: 13)。在尝试了许多Internet解决方案之后,发明了一种对我有帮助的解决方案(保护者!)

将这些行添加到配置中/etc/apparmor.d/usr.sbin.mysqld(并重新加载apparmor和mysql):

/path/to/mysql/data/ r,
/path/to/mysql/data/** rwk,

经常解决方案之间的主要区别是:两个规则(对于dir本身以及其中的所有文件,请注意double **)和k允许mysql锁定文件的选项。

希望这对某人有帮助。


您也可以将其添加到/etc/apparmor.d/local/usr.sbin.mysqld。创建文件(如果不存在)。有关更多详细信息,请参见/etc/apparmor.d/local/README
knb

1

检查空间以确保它是100%

df -h

好像它已满,它不会创建.sock文件。


答案是关于一个令人惊讶的副作用,我强烈不同意它是LQ。
user259412 '17

0

请检查文件部分中 是否有pid-file参数。如果不存在,则会发生。[mysql]my.cnfunable to lock ...ibdata1.. error:1


0

简单,但比使用“ cp -a”的方法快。并且在“ cp -a”和其他所有其他工具无法提供的帮助下提供帮助。

  1. service mysql stop && pkill -f mysql

摆脱所有mysql进程

  1. vi /etc/mysql/my.cnf

将参数datadir = / var / lib / mysql更改为datadir = / var / lib / mysql2(或者如果没有,只需添加)

  1. mv /var/lib/mysql /var/lib/mysql2

将datadir重命名为新名称

  1. service mysql start

准备你的手鼓


0

如果其他解决方案均无效,则问题可能出在AppArmor配置错误。

所以做:

$ apt install apparmor-profiles

然后重新启动MySQL(注意重新启动的速度)。

我注意到在执行以下操作时缺少与AppArmor相关的文件:

$ systemctl status mysql.service

因此,为什么我认为AppArmor的配置有问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.