我有一个基于EC2的micro实例服务器

mysql服务器经常出现故障,这是mysql服务器第三次消失.日志(log)只显示

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

什么是真正的failed; errno 12?我怎样才能给它更多的空间/内存,或者任何需要的东西来修复它.

每次我都会通过重新启动整个系统、删除所有日志(log)并重新启动mysql服务器来解决这个问题.但我知道我的配置有问题.

也是我的.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

推荐答案

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

添加交换页为我解决了这个问题.

您可以按照以下步骤设置交换空间.

如果它仍然对你不起作用,考虑使用RDS服务.

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

我复制了博客的内容以作记录.博客作者pmoubed:

Amazon EC2微实例交换空间-Linux

我有一个Amazon EC2 Linux微实例.由于微实例只有613MB内存,MySQL时不时会崩溃.在长时间搜索MySQL、微实例和内存管理后,我发现微实例没有默认的交换空间.因此,如果你想避免崩溃,你可能需要为你的微实例设置一个交换空间.实际上,性能方面最好启用交换.

下面的步骤显示了如何为微实例创建交换空间.我假设你有一个微实例运行的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.

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

$ swapon -s   
$ free -k

$ swapoff -a
$ swapon  -a

参考资料:

  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/

Mysql相关问答推荐

在SQL中,复合索引最左边的前置是否与非复合索引一样性能?

为什么IN子句中有GROUP BY会导致查询变得不可执行?

配置MySQL服务器以管理数千个表

返回包含某一列的分组最大值的行,说明列中的重复值

MySQL-带有用户定义变量的IF-THEN语句

MySQL 搜索列字段字符串

MySQL中如何对字符串进行算术运算?

我是否需要在 N+1 列上建立索引,才能有效地在 N 列上执行 SELECT,并按其他列排序?

为什么Mysql会根据查询参数改变查询执行计划?

MySQL函数 - 如何对select查询应用多个条件

仅当其他行相等时才 Select 行值

如何通过if语句对SQL查询进行排序

Golang Gorm 没有创建带有约束的表

使用 ON DUPLICATE KEY 将列增加一定数量 MySQL NodeJS

将每组的总和除以总数

如何使主键从 1000 开始?

如何用一系列日期填充表格?

使用 mysql 处理非常大的数据

外键可以引用非唯一索引吗?

MySQL获取两个值之间的随机值