无法在 linux 上启动 mysqld_safe

Posted

技术标签:

【中文标题】无法在 linux 上启动 mysqld_safe【英文标题】:Can't start mysqld_safe on linux 【发布时间】:2014-03-09 13:19:29 【问题描述】:

我已经下载了 mysql 二进制文件,我正在尝试按照说明here 进行安装。当我尝试运行bin/mysqld_safe --user=mysql & 命令时,我得到以下输出:

40211 19:04:56 mysqld_safe 记录到“/usr/local/mysql/data/irpowerweb.err”。 140211 19:04:56 mysqld_safe 使用来自 /usr/local/mysql/data 的数据库启动 mysqld 守护进程 140211 19:04:57 pid 文件 /usr/local/mysql/data/irpowerweb.pid 中的 mysqld_safe mysqld 结束

错误日志的内容是:

140211 19:07:01 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
2014-02-11 19:07:02 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2014-02-11 19:07:02 19511 [Note] Plugin 'FEDERATED' is disabled.
2014-02-11 19:07:02 19511 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2014-02-11 19:07:02 19511 [Note] InnoDB: The InnoDB memory heap is disabled
2014-02-11 19:07:02 19511 [Note] InnoDB: Mutexes and rw_locks use InnoDB's own implementation
2014-02-11 19:07:02 19511 [Note] InnoDB: Compressed tables use zlib 1.2.3
2014-02-11 19:07:02 19511 [Note] InnoDB: Using Linux native AIO
2014-02-11 19:07:02 19511 [Note] InnoDB: Not using CPU crc32 instructions
2014-02-11 19:07:02 19511 [Note] InnoDB: Initializing buffer pool, size = 64.0M
InnoDB: mmap(68370432 bytes) failed; errno 12
2014-02-11 19:07:02 19511 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2014-02-11 19:07:02 19511 [ERROR] Plugin 'InnoDB' init function returned error.
2014-02-11 19:07:02 19511 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2014-02-11 19:07:02 19511 [ERROR] Unknown/unsupported storage engine: InnoDB
2014-02-11 19:07:02 19511 [ERROR] Aborting

2014-02-11 19:07:02 19511 [Note] Binlog end

...
Shutting down stuff
...

2014-02-11 19:07:02 19511 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete

140211 19:07:02 mysqld_safe mysqld from pid file /usr/local/mysql/data/irpowerweb.pid ended

这里是my.cnf

[mysqld]
innodb_buffer_pool_size = 64M    
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

我只想让 mysql 以 w/e 方式运行。我尝试使用yum install mysql-server 安装软件包,下载 rpm 软件包但未能启动。我选择了简单的 tar 包并开始按照上面的链接进行操作,但是我又一次未能启动它。 由于错误状态为Cannot allocate memory for the buffer pool,我尝试将内存减少到64m(默认为128m),但没有成功。 我是这方面的新手,我已经做了很多搜索,还没有弄清楚如何解决这个问题。

附:如果有帮助,我正在使用 ssh 连接到内存不足的服务器(512MB 内存,没有交换),我认为这是一个红帽 Linux。

【问题讨论】:

您可以发布您的my.cnf 文件吗? 系统有512MB内存,使用free命令我可以看到大部分都可用(大约450MB),所以我觉得我有足够的空间启动mysql。 禁用所有不需要的引擎,并配置 mysqld 以使用尽可能少的内存。谷歌搜索low memory mysql 有很多关于如何做到这一点的教程 您最严重的错误是Cannot allocate memory for the buffer pool 尝试在my.cnf 中降低它。另外,您使用的是什么发行版? @Oerd 我确实尝试将其从 128 降低到 64,但仍然不起作用。这是一顶红帽子,我认为它是 CentOS。 【参考方案1】:

您最严重的错误是:

无法为缓冲池分配内存

你必须降低它,my.cnf

当您运行free 时,mysqld_safe 已经完成清理,因此您必须通过另一个终端监控内存。但是默认的my.cnf 会用完你的可用内存是很正常的。这就是 Debian 不附带默认 my.cnf 配置的原因之一。

更新: 以防万一,请确保:

遵循MySQL Tuner 对您系统的建议。 确保 SELinux 已关闭或设置为允许 mysql 使用ulimit -s 确保您的堆栈大小足够大(您可以增加它:ulimit -s <new_size> 甚至ulimit -s unlimited

【讨论】:

尝试将innodb_buffer_pool_size 降低到 32M、16M 和 8M。前 2 个因错误日志冗长而失败,最后一个因InnoDB: Error: pthread_create returned 11 而失败。 一些你可以尝试的东西【参考方案2】:

尝试添加:

[mysqld]
...
skip-bdb
skip-innodb

这将完全阻止 Berkley DB 和 InnoDB 的启动。

【讨论】:

skip-bdb 是未知参数,因此我将其删除。之后错误日志为2014-02-11 19:48:07 5424 [Note] Plugin 'FEDERATED' is disabled. 2014-02-11 19:48:07 5424 [Note] Plugin 'InnoDB' is disabled. 2014-02-11 19:48:07 5424 [ERROR] Unknown/unsupported storage engine: InnoDB 2014-02-11 19:48:07 5424 [ERROR] Aborting 您是否禁用了所有其他 innodb 配置选项? 我这样做了,但仍然出现同样的错误:Unknown/unsupported storage engine: InnoDB. ok,尝试设置 default-storage-engine=myisam 或在启动 mysql 时传递 --default-storage-engine=myisam 原来我也必须设置default-tmp-storage-engine:serverfault.com/a/502025/209055【参考方案3】:

我找到了我的答案here。使用了以下 my.cnf 并且有效:

[mysqld] 
innodb=OFF 
ignore-builtin-innodb 
skip-innodb
default-storage-engine=myisam 
default-tmp-storage-engine=myisam

【讨论】:

以上是关于无法在 linux 上启动 mysqld_safe的主要内容,如果未能解决你的问题,请参考以下文章

MySQL安装过程启动mysqld_safe中提示的pid ended错误导致无法启动问题处理

linux 忘记mysql数据库密码

mysqld_safe的作用

mysql程序之mysqld_safe详解

爱在linux系统安装mysql,启动失败,求助,原因如下:

使用 mysqld_safe 运行 MySQL 后如何停止它?