无法在 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错误导致无法启动问题处理