Amazon EC2,mysql中止启动因为InnoDB:mmap(x bytes)失败; errno 12

PMo*_*bed 90 mysql amazon-ec2

我根据我在这里阅读的内容在EC2上设置了一个实例服务器

mysql服务器频繁失败,第三次mysql服务器消失了.日志只显示

120423 09:13:38 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
120423 09:14:27 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120423  9:14:27 [Note] Plugin 'FEDERATED' is disabled.
120423  9:14:27 InnoDB: The InnoDB memory heap is disabled
120423  9:14:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120423  9:14:27 InnoDB: Compressed tables use zlib 1.2.3
120423  9:14:27 InnoDB: Using Linux native AIO
120423  9:14:27 InnoDB: Initializing buffer pool, size = 512.0M
InnoDB: mmap(549453824 bytes) failed; errno 12
120423  9:14:27 InnoDB: Completed initialization of buffer pool
120423  9:14:27 InnoDB: Fatal error: cannot allocate memory for the buffer pool
120423  9:14:27 [ERROR] Plugin 'InnoDB' init function returned error.
120423  9:14:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120423  9:14:27 [ERROR] Unknown/unsupported storage engine: InnoDB
120423  9:14:27 [ERROR] Aborting
Run Code Online (Sandbox Code Playgroud)

真的是什么failed; errno 12?我怎么能提供更多的空间/内存或任何需要修复它的东西.

我每次都通过重新启动整个系统并删除所有日志并重新启动mysql服务器来修复此问题.但我知道我的配置有问题.

我的`my.cnf'如下所示:

[mysqld]
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
# max_allowed_packet=500M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0


innodb_buffer_pool_size         = 512M


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Run Code Online (Sandbox Code Playgroud)

小智 162

当我尝试在没有RDS的情况下在我的微实例上运行wordpress时,我遇到了同样的问题.

添加一个Swap页面为我解决了这个问题.

您可以按照此步骤设置交换页面:

http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html

如果它仍然不适合您,请考虑使用RDS服务.

===============================================

博客的链接有时会失败.我复制了以下内容以备记录.归功于博客作者Pedram Moubed:

Amazon EC2微实例交换空间 - Linux

我有一个Amazon EC2 Linux Micro实例.由于Micro实例只有613MB的内存,因此MySQL偶尔会崩溃.在对MySQL,Micro Instance和Memory Managment进行了长时间的搜索后,我发现Micro实例没有默认的SWAP空间.因此,如果您想避免崩溃,可能需要为微实例设置交换空间.实际上,性能明智更好地启用交换.

以下步骤显示如何为Micro实例创建交换空间.我假设您拥有运行Micro实例的AWS账户.

  1. dd if=/dev/zero of=/swapfile bs=1M count=1024
  2. mkswap /swapfile
  3. swapon /swapfile
  4. 添加此行/swapfile swap swap defaults 0 0/etc/fstab

如果要在每次重新启动后自动启用交换文件,则需要执行步骤4.

一些与SWAP空间相关的有用命令:

$ swapon -s   
$ free -k

$ swapoff -a
$ swapon  -a
Run Code Online (Sandbox Code Playgroud)

参考文献:

  1. http://www.thegeekstuff.com/2010/08/how-to-add-swap-space/
  2. http://cloudstory.in/2012/02/getting-the-best-out-of-amazon-ec2-micro-instances/
  3. http://cloudstory.in/2012/02/adding-swap-space-to-amazon-ec2-linux-micro-instance-to-increase-the-performance/
  4. http://aws.amazon.com/ec2/instance-types/

  • 仅供参考,这对我来说是数字海洋液滴(512 MB).并不是说这应该让任何人感到惊讶,但是如果有人不确定,它可能会在任何服务器上运行同样的问题. (8认同)
  • 对于Digital Ocean用户,我遵循了本教程,它就像一个魅力:https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04 (4认同)

wfb*_*ale 23

我在Amazon EC2微实例上也遇到了这个问题.我尝试通过添加以下内容来减少inno_db的内存使用量/etc/my.cnf

innodb_buffer_pool_size = 64M

这不起作用,我试着把它降到16M,它仍然无法正常工作.然后我意识到实例基本上没有可用内存.所以我尝试重启apache

sudo system httpd restart
sudo system mysqld restart

一切都很好.也许另一个解决方案是配置apache以不会以某种方式消耗这么多内存.

  • MySQL可能仍然崩溃,因此您可能需要为微实例添加交换空间. (2认同)

Eri*_* J. 5

看起来您在帖子中显示的 my.cfg 文件中为 innodb_buffer_pool_size请求128M内存,但 MySQL 认为您请求的是512M内存:

正在初始化缓冲池,大小 = 512.0M

向下几行,错误消息告诉您 MySQL 将无法启动,因为它无法为 InnoDB 缓冲池预留足够的 (512M) 内存:

致命错误:无法为缓冲池分配内存

这就引出了三个问题:

  1. 你的实例有多少内存?是否应该有足够的内存来容纳 512M InnoDB 试图为缓冲池获取的内存,以及 MySQL 分配的所有其他内容,以及您的应用程序和操作系统?
  2. 为什么 InnoDB 试图采取比您认为应该的更多的措施?
  3. 为什么 MySQL 会重新启动?

你可以回答1。

至于 2.,有几个不同的地方可以找到 MySQL 选项文件。随后找到的文件覆盖先前找到的文件中指定的选项。看

http://dev.mysql.com/doc/refman/5.5/en/option-files.html

问题 3. 可能是由于启动后某个时间发生的内存不足情况。如果是这种情况,您应该会在日志中进一步看到该指示。

最后,但有些无关,您是否使用 EBS 支持的实例?对于数据库服务器,通常强烈建议这样做(实际上,对于任何实例,除非特殊情况)。有关更多信息,请参阅

/sf/answers/254149521/