EC2 MySQL不断崩溃

Dav*_*vid 12 mysql innodb amazon-ec2

我在x64 amazon linux ami上设置了EC2实例.

我正在使用PHP和Wordpress与W3总缓存和MySQL支持的php-apc来测试一个可以相对便宜地处理大量连接的博客.

但是,我的mysql一直在崩溃.

取自/var/log/mysqld.log

120912  8:44:24 InnoDB: Completed initialization of buffer pool
120912  8:44:24 InnoDB: Fatal error: cannot allocate memory for the buffer pool
120912  8:44:24 [ERROR] Plugin 'InnoDB' init function returned error.
120912  8:44:24 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120912  8:44:24 [ERROR] Unknown/unsupported storage engine: InnoDB
Run Code Online (Sandbox Code Playgroud)

有人知道这可能发生的原因吗?

当前内存使用情况(下)

[root@ip-obscure mysql]# free -m
             total       used       free     shared    buffers     cached
Mem:           594        363        230          0          3         67
-/+ buffers/cache:        293        301
Swap:            0          0          0
Run Code Online (Sandbox Code Playgroud)

小智 8

要小心你没有足够的内存,是的,这是你看到的错误,但这也是一个症状不是原因.在支付更大的实例之前等待,问题只会消失一段时间,直到内存再次填满.

警惕创建SWAP文件,再次只是包装症状.

也要小心改变配置设置(以及限制你的apache或mysql的性能),这些设置已经运行了一段时间,但现在突然间,服务器根本不会长时间停留.

想想怎么可能真的是设置?如果在PHP中存在严重优化的设置或内存泄漏,那么在相同的时间段之后它将一直失败.因此,假设您最近没有安装新模块并且在一段时间内拥有相当静态的环境,则不太可能是内存泄漏或设置.显然,如果你刚刚安装新模块,那么禁用它们应该始终是第一步

要小心将数据库拆分到另一台服务器,这不会像购买更大的服务器解决问题一样解决问题.是的,每个函数最初会获得更多内存但是.....

要小心从apache迁移到另一个http服务器,如NginX,这是一个激烈的步骤,这可能会解决问题......但是由于错误的原因

我对其中的大部分内容感到内疚,并提出了许多错误的希望,直到我查看了apache/var/log/httpd/ACCESS_LOG文件,并发现我的网站每秒都被同一个IP命中几次,正在寻找一个名为XMLRPC.PHP,某种在Wordpress圈子中众所周知的DDOS攻击.

示例access_log条目....

191.96.249.80 - - [21/Nov/2016:20:27:53 +0000]"POST /xmlrpc.php HTTP/1.0"200 370

每次收到apache都会尝试实例化子进程来为该请求提供服务.不久之后,内存不足,apache开始无法分叉新进程,而mysql放弃尝试将内存空间分配给缓冲池.你基本上没有内存,所有这些请求都会使你的服务器停止运行.

为了解决这个问题,我更改了.htaccess文件以拒绝从该IP访问该文件,我的服务器立即恢复正常运行.

例如.htaccess

<Files xmlrpc.php>

order allow,deny

deny from 191.96.249.80

allow from all

</Files>"
Run Code Online (Sandbox Code Playgroud)

希望我辛苦获得的发现可以帮助别人!

显然,如果您的访问日志没有显示DDOS效果,它可能是其他的,尝试以上所有!;-)但我现在看到几个wordpress/apache网站对这次攻击感到满意....也是同样的IP!遗憾的是亚马逊AWS不允许在其安全组中使用黑名单.[叹]


Mik*_*ant 4

我想您的实例缺乏执行您想做的事情所需的内存。

您是否考虑过使用 RDS for MySQL?这确实是 AWS 世界中的首选方法(至少对于不需要高度自定义配置的数据库来说),并且会给您带来比在 EBS 存储上运行 MySQL 更好的性能(我假设您正在这样做,否则您会这样做)无法持久保存您的数据库内容)。