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不允许在其安全组中使用黑名单.[叹]
我想您的实例缺乏执行您想做的事情所需的内存。
您是否考虑过使用 RDS for MySQL?这确实是 AWS 世界中的首选方法(至少对于不需要高度自定义配置的数据库来说),并且会给您带来比在 EBS 存储上运行 MySQL 更好的性能(我假设您正在这样做,否则您会这样做)无法持久保存您的数据库内容)。
归档时间: |
|
查看次数: |
8013 次 |
最近记录: |