Innodb崩溃,mysql直到服务器重启才启动

时间:2017-05-11 13:13:47

标签: mysql apache amazon-ec2 innodb

我有以下问题。

我有一个安装了LAMP的AWS EC2 t2.micro实例。

我的WebApp使用InnoDB表。如果有很多用户,InnoDB因缓冲池大小而过去崩溃。它说它不能分配内存。

  

170511 10:32:05 InnoDB:初始化缓冲池,大小= 128.0M

     

InnoDB:mmap(137363456字节)失败; errno 12

我已将 innodb_buffer_pool_size 添加到750M(如果我把它放得更多1GB - mysql根本没有启动)。我在LoadImpact下对我的WebApp进行了压力测试。从30人起,WebApp试图分配800M之类的内容并再次崩溃MySQL。

  

170511 12:16:04 InnoDB:初始化缓冲池,大小= 752.0M

     

InnoDB:mmap(807010304字节)失败; errno 12

另一个问题是我不能在mysql崩溃后运行 sudo service mysql start restart 。它说工作未能开始。

  1. 如何让我的服务器更稳定。我应该使用哪些选项。
  2. 如何防止这种“崩溃”行为。我的意思是我可以制作一些使服务器和mysql不会混乱而是冻结或类似的东西。我不希望每次网站上有很多人 sudo reboo

1 个答案:

答案 0 :(得分:0)

t2.micro实例只有512M RAM。如果你在同一个盒子上运行MySQL和Apache,你应该谨慎分配内存。

看起来apache进程占用了所有内存,因此MySQL获得的内存不到最低限度。

如果您还没有添加掉,我建议先添加交换。

dd if=/dev/zero of=/swapfile bs=1024 count=65536
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile

并将其添加到/etc/fstab

/swapfile          swap            swap    defaults        0 0

接下来,限制Apache工作人员以确保MySQL始终获得innodb_buffer_pool_size。根据您使用的内容 - prefork或worker配置会有所不同,但您有了一个想法。