MySQL启动报错问题InnoDB:Unable to lock/ibdata1 error

 更新时间:2019年07月02日 08:32:04   作者:FOOFISH-PYTHON之禅  
这篇文章主要介绍了MySQL启动报错问题InnoDB:Unable to lock/ibdata1 error,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在OS X环境下MySQL启动时报错:

016-03-03T00:02:30.483037Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 35
2016-03-03T00:02:30.483100Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.

终端不断地重复打印上面的错误日志,从错误日志看起来似乎有另外一个mysqld进程占用了./ibdata1文件,于是使用ps命令查看是否有mysqld进程在运行:

ps -ef |grep mysqld
74 7711 1 0 8:04上午 ?? 0:00.34 /usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid

发现有一个7711的进程在运行,于是强制kill掉:

sudo kill -9 7711

再次ps查询:

ps -ef |grep mysqld
74 7759 1 0 8:10上午 ?? 0:00.29 /usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid

发现还在,只不过pid由原来的7711变成了现在的7759,那么看看mysqld进程打开了哪些文件:

lsof -c mysqld

该进程没有打开任何文件,这就见鬼了。

Mac OS X, lsof only shows your own processes unless running as root with sudo

于是再次运行:

sudo lsof -c mysqld
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 8655 _mysql cwd DIR 1,4 544 3090250 /usr/local/mysql/data
mysqld 8655 _mysql txt REG 1,4 31130736 3089789 /usr/local/mysql/bin/mysqld

的确发现有一个实实在在的mysqld进程在运行,也占用的这些mysql文件,经过一番Google大法,发现在OS X中启动MySQL跟在Linux中启动方式完全是牛马不相及,在OS X中启动/重启MySQL的正确姿势是:

sudo launchctl unload -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist

此时再来看看是否还有mysqld进程:

ps -ef |grep mysqld

嗯,发现确实没有了,再来启动MySQL:

sudo launchctl load -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist

问题总算解决,但还没完,总得把原理搞清楚才行。

LAUNCHD是什么?

launchd是Mac OS X从10.4开始引入,用于用于初始化系统环境的关键进程,它是内核装载成功之后在OS环境下启动的第一个进程。传统的Linux会使用/etc/rc.*或者/etc/init来管理开机要启动的服务,而在OS X中就是使用launchd来管理。采用这种方式来配置启动项很简单,只需要一个plist文件。/Library/LaunchDaemons目录下的plist文件都是系统启动后立即启动进程。使用launchctl命令加载/卸载plist文件,加载配置文件后,程序启动,卸载配置文件后程序关闭。

卸载配置文件后又尝试直接用mysqld命令来启动mysql进程试试:

/usr/local/mysql/bin/mysqld
2016-03-03T01:35:50.359258Z 0 [ERROR] InnoDB: ./ib_logfile0 can't be opened in read-write mode.
2016-03-03T01:35:50.359283Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2016-03-03T01:35:50.670517Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2016-03-03T01:35:50.670555Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2016-03-03T01:35:50.670568Z 0 [ERROR] Failed to initialize plugins.
2016-03-03T01:35:50.670574Z 0 [ERROR] Aborting

ib_logfile0不能被打开,猜测是用户权限文件,不能用当前系统用户启动mysql。那么加上sudo看看,用root来启动:

2016-03-03T01:38:10.977313Z 0 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
2016-03-03T01:38:10.977339Z 0 [ERROR] Aborting
2016-03-03T01:38:10.977350Z 0 [Note] Binlog end
2016-03-03T01:38:10.977410Z 0 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete

叫我去读MySQL的安全手册,还是用launchd的方式启动吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • MySQL数据库表修复 MyISAM

    MySQL数据库表修复 MyISAM

    这篇文章主要介绍了MySQL数据库表修复 MyISAM ,需要的朋友可以参考下
    2014-06-06
  • MySQL中LOW_PRIORITY含义和用法详解

    MySQL中LOW_PRIORITY含义和用法详解

    LOW_PRIORITY是MySQL中的一个关键字,它用于在执行某些操作时改变这些操作的优先级,本文主要介绍了MySQL中LOW_PRIORITY用法,感兴趣的可以了解一下
    2024-07-07
  • mysql 5.7.21解压版本安装 Navicat数据库操作工具安装

    mysql 5.7.21解压版本安装 Navicat数据库操作工具安装

    这篇文章主要为大家详细介绍了mysql 5.7.21解压版本安装,Navicat数据库操作工具安装,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 安装Mysql时可能会遇到的一些疑难杂症

    安装Mysql时可能会遇到的一些疑难杂症

    这篇文章主要给大家介绍了关于安装Mysql时可能会遇到的一些疑难杂症,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • MySQL子查询详细教程

    MySQL子查询详细教程

    这篇文章主要介绍了MySQL子查询详细教程的相关资料,需要的朋友可以参考下
    2022-10-10
  • MySQL监控Innodb信息工作流程

    MySQL监控Innodb信息工作流程

    这篇文章主要为大家介绍了MySQL监控Innodb信息工作流程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-02-02
  • mysql根据拼音字母查询(简单易懂的字段拼音查询)

    mysql根据拼音字母查询(简单易懂的字段拼音查询)

    MySQL在开发中,我们经常需要根据字段拼音查询数据库中的数据,它支持多种查询方式,包括根据拼音字母查询,使用 Collation 可以方便地进行简单的拼音查询,而使用拼音索引可以大幅提高查询性能,根据具体的需求和情况,我们可以选择合适的方法来实现拼音查询
    2023-10-10
  • MySQL性能优化之table_cache配置参数浅析

    MySQL性能优化之table_cache配置参数浅析

    这篇文章主要介绍了MySQL性能优化之table_cache配置参数浅析,本文介绍了它的缓存机制、参数优化及清空缓存的命令等,需要的朋友可以参考下
    2014-07-07
  • MYSQL SQL查询近7天一个月的数据的操作方法

    MYSQL SQL查询近7天一个月的数据的操作方法

    这篇文章主要介绍了MYSQL SQL查询近7天一个月的数据的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Mysql字符串截取函数SUBSTRING的用法说明

    Mysql字符串截取函数SUBSTRING的用法说明

    今天建视图时,用到了MySQL中的字符串截取,很是方便。
    2011-06-06

最新评论