启动mysqld时报错:
: mmap(10731520 bytes) failed; errno 12
2014-02-23 17:25:32 26854 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2014-02-23 17:25:32 26854 [ERROR] Plugin 'InnoDB' init function returned error.
2014-02-23 17:25:32 26854 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2014-02-23 17:25:33 26854 [ERROR] Unknown/unsupported storage engine: InnoDB
2014-02-23 17:25:33 26854 [ERROR] Aborting
网上大多数是让调整my.cnf中innodb_buffer_pool_size的大小,
结果从128调整到了10M,也不管用。
后来在stackoverflow上看到一个问题,人家是在AWS的EC2上架设的mysql,解决方法中提到swap交换分区调整。
http://stackoverflow.com/questions/21446427/mysql-fails-on-restart-innodb-me-alloc-error-12
输入free执行一看,阿里云分的swap为0。于是重新分配了swap文件,然后再次启动mysqld服务,问题解决。
分配swap文件
dd if=/dev/zero of=/swapfile bs=1M count=1024
格式化swap文件
mkswap /swapfile
激活swap文件
swapon /swapfile
查看swap文件是否存在
swapon -s
在/etc/fstab中加入下面一行,下次重启服务器也自动加载swap
/swapfile swap swap defaults 0 0