<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Chipcha.com的Mysql最近经常崩溃,本来还准备写一个监控的脚本去自动重启,但是今天居然连手动重启都做不到了。只能去/var/log/mysqld.log 看错误报告去了。结果错误报告显示如下:</span>
141204 03:56:58 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
141204 3:56:58 [Note] Plugin 'FEDERATED' is disabled.
141204 3:56:58 InnoDB: The InnoDB memory heap is disabled
141204 3:56:58 InnoDB: Mutexes and rw_locks use GCC atomic builtins
141204 3:56:58 InnoDB: Compressed tables use zlib 1.2.3
141204 3:56:58 InnoDB: Using Linux native AIO
141204 3:56:58 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
141204 3:56:58 InnoDB: Completed initialization of buffer pool
141204 3:56:58 InnoDB: Fatal error: cannot allocate memory for the buffer pool
141204 3:56:58 [ERROR] Plugin 'InnoDB' init function returned error.
141204 3:56:58 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
141204 3:56:58 [ERROR] Unknown/unsupported storage engine: InnoDB
141204 3:56:58 [ERROR] Aborting
141204 3:56:58 [Note] /usr/libexec/mysqld: Shutdown complete
141204 03:56:58 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
基本上就是无法分配内存。一开始尝试修改配置文件/etc/
my
.cnf, 添加如下语句:
innodb_use_sys_malloc =0
不论设置为1还是0,都不能解决问题。
于是再添加一句
innodb_buffer_pool_size = 1M
还是无法解决问题。
后来进一步搜索发现可能是instance的内存不够,于是找到一个办法是用swap,于是进行如下操作:
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
执行需要一点时间,完成之后执行如下:
sudo mkswap /swapfile
sudo swapon /swapfile
最后再在/etc/fstab里添加如下一句:
/swapfile swap swap defaults 0 0
当然我还是使用的是emacs编辑。
再重启mysql,启动成功。
这次hotfix不仅让我坚定了这几天就萌生的使用RDS型instance的想法,也让我操作了一下swap。优普贷的网站访问量应该不会太大,所以应该不需要使用RDS的instance。
不过也难说。
Some useful command related to SWAP space:
$ swapon -s
$ free -k
$ swapoff -a
$ swapon -a