解决mac上mysql莫名其妙的启动不了

摘要:
在Mac OS X上,也只显示您自己的进程runningasrootwithsudo再次运行:1234 sudolsof cmysqldCOMMANPIDUSERFDTYPEDEVESIZE/OFFNODENAMEmysqld8655_ mysqlcwdDIR1454433090250/usr/local/mysql/datamysqld8655/MysqltxtREG14311307363089789/usr/local/mysql/bin/mysqld发现有一个真实的mysqld进程正在运行,这些mysql文件也被占用。经过一些Google方法,发现在OSX中启动MySQL与在Linux中启动MySQL完全不同。在OSX中启动/重新启动MySQL的正确姿势是:1sudlaunchctlunload w/Library/LaunchDaemons/com.oracle.oss。mysqld-Plist现在将检查是否有任何mysqld进程:1ps-ef|grepmysqld。嗯,我们发现没有mysqld进程。然后启动MySQL:1sudolaunchctlload-w/Library/LaunchDaemons/com.oracle.oss。mysqld plist问题终于解决了,但还没有结束。我们必须弄清楚原理/LaunchDaemons目录中的plist文件都在系统启动后立即启动进程。

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

1
2
016-03-03T00:02:30.483037Z 0 [ERROR] InnoDB: Unable tolock ./ibdata1 error: 35
2016-03-03T00:02:30.483100Z 0 [Note] InnoDB: Checkthat you do notalready have another mysqld process using the same InnoDB data orlog files.

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

1
2
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掉:

1
sudo kill -9 7711

再次ps查询:

1
2
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进程打开了哪些文件:

1
lsof -c mysqld

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

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

于是再次运行:

1
2
3
4
sudo lsof -c mysqld
COMMAND PID USERFD TYPE DEVICE SIZE/OFFNODE 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的正确姿势是:

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

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

1
ps -ef |grep mysqld

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

1
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进程试试:

1
2
3
4
5
6
7
/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 asa STORAGE ENGINE failed.
2016-03-03T01:35:50.670568Z 0 [ERROR] Failed toinitialize plugins.
2016-03-03T01:35:50.670574Z 0 [ERROR] Aborting

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

1
2
3
4
2016-03-03T01:38:10.977313Z 0 [ERROR] Fatal error: Please read"Security"sectionofthe manual tofind outhow torun mysqld asroot!
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的方式启动吧。

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

免责声明:文章转载自《解决mac上mysql莫名其妙的启动不了》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql router使用配置Jquery面试题整合下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

order by调优的一些测试

表结构信息:mysql> show create table tbG*************************** 1. row *************************** Table: tbCreate Table: CREATE TABLE `tb` ( `c` int(11) DEFAULT NULL, `d` int(4)...

数据库并发处理

为什么要有锁? 我们都是知道,数据库中锁的设计是解决多用户同时访问共享资源时的并发问题。在访问共享资源时,锁定义了用户访问的规则。根据加锁的范围,MySQL 中的锁可大致分成全局锁,表级锁和行锁三类。在本篇文章中,会依次介绍三种类型的锁。在阅读本篇文章后,应该掌握如下的内容: 为什么要在备份时使用全局锁? 为什么推荐使用 InnoDB 作为引擎进行备份?...

使用ThinkPHP开发中MySQL性能优化的最佳21条经验

使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过 多的S...

linux下导入导出MySQL数据库

一、导出:用mysqldump命令行命令格式mysqldump -u 用户名 -p 数据库名 > 数据库名.sql范例:mysqldump -u root -p abc > abc.sql(导出数据库abc到abc.sql文档)提示输入密码时,输入该数据库用户名的密码。 *************************************...

mysql中的data下的数据文件(.FRM、.MYD、.MYI)恢复为数据

记一次mysql中的data文件操作经历 想拿到一个项目的最新的数据,做功能升级使用,备份一份数据同时也作为本地测试数据,文件有些大,我直接通过远程的phpmyadmin程序导出,不能愉快的玩耍,直接联系了IDC的同事帮忙导一份sql文件出来一下,结果那哥们没得直接扔给了我data文件,这让我如何是好,这个问题我没遇见过啊。处于面子问题,又不好意思再让他重...

mysql导入备份.sql文件时报错总结(还有待完善)

错误1:ERROR Unknown character set: 'utf8mb4'   utf8mb4编码集支持了表情符号,相信处理过社交网络数据的人都有了解。这个mysql5.5以后支持了utf8mb4编码集,所以只能卸载5.1,升级5.5   在mysql my.cnf设置default-character-set = utf8mb4,在每个[]里都...