查看Mysql的error.log如下:
150816 10:31:21 InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12
———————————
Google之后发现是MySQL 5.6的问题:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
参考链接:http://www.tocker.ca/2013/10/30/installing-the-latest-mysql-5-6-on-amazon-linux-using-official-repos.html
所以,打开MySQL会占用70%左右的内存,Linux 512M的内存秒秒钟不够用了。。。
——————————
第一种解决方法:
修改MySQL的my.cnf配置文件,添加或修改为以下代码:
innodb_buffer_pool_size = 8M
然后,重启。。。
使用“top -M”命令查看内存使用情况,512M内存mysql峰值在20%左右。
问题解决!
——————————
第二种解决方法:
把MySQL 5.6更换为更低版本5.5或以下,同样可以解决问题。
——————————
第三种解决方法:
升级你的主机配置,内存加到1G,同样解决问题,我还有一台ECS是1G内存的,不会出现这种问题。
第四种解决方法:
如果在使用前面两种方法下还是出现问题,可以尝试使用第四种方法。
一般情况下,阿里的ECS没有设置swap分区,所以:
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 文件中
使用 free 命令查看交换空间,单位为KB:
free -k
total used free shared buffers cached
Mem: 3082356 2043700 1038656 0 50976 1646268
-/+ buffers/cache: 346456 2735900
Swap: 1048568 0 1048568
重启mysql,问题解决!
参考资料: http://www.thegeekstuff.com/2010/08/how-to-add-swap-space/
http://stackoverflow.com/questions/10284532/amazon-ec2-mysql-aborting-start-because-innodb-mmap-x-bytes-failed-errno-12
__转载请注明来源:http://vinci.link/bugs/%E9%98%BF%E9%87%8C%E4%BA%91ecs-%E9%94%99%E8%AF%AFmysql-server-quit-without-updating-pid-file%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/