【问题标题】:Innodb crashes, mysql doesn't start until server rebootInnodb 崩溃,mysql 直到服务器重新启动才启动
【发布时间】:2017-05-11 23:47:15
【问题描述】:

我有以下问题。

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

我的 WebApp 使用 InnoDB 表。如果有很多用户,InnoDB 曾经因为缓冲池大小而崩溃。它说它无法分配足够的内存。

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

InnoDB:mmap(137363456 字节)失败;错误号 12

我已将 innodb_buffer_pool_size 设置为 750M(如果我将其设置为超过 1GB - mysql 根本不会启动)。我已经在 LoadImpact 下对我的 WebApp 进行了压力测试。从 30 人起,WebApp 试图分配 800M 之类的东西,结果又让 MySQL 崩溃了。

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

InnoDB:mmap(807010304 字节)失败;错误号 12

另一个问题是我不能在 mysql Crash 后只运行 sudo service mysql startrestart。它说作业无法启动。

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

【问题讨论】:

标签: mysql apache amazon-ec2 innodb


【解决方案1】:

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 配置会有所不同,但您有一个想法。

【讨论】: