我的 Rackspace Centos 6.4 服务器实例上的 MySQL 有问题。该问题类似于此 StackOverflow question中描述的问题。MySQL 在某个时候被 mysqld_safe 自动重启,重启失败,因为 InnoDB 试图分配 128Mb 的 RAM,但失败了。的输出mysqld.log
如下:
140129 18:05:26 mysqld_safe Number of processes running now: 0
140129 18:07:30 InnoDB: Mutexes and rw_locks use GCC atomic builtins
140129 18:07:30 InnoDB: Compressed tables use zlib 1.2.3
140129 18:07:30 InnoDB: Using Linux native AIO
140129 18:07:35 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
140129 18:07:46 InnoDB: Completed initialization of buffer pool
140129 18:07:46 InnoDB: Fatal error: cannot allocate memory for the buffer pool
140129 18:07:47 [ERROR] Plugin 'InnoDB' init function returned error.
140129 18:07:47 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140129 18:08:07 [ERROR] Unknown/unsupported storage engine: InnoDB
140129 18:08:10 [ERROR] Aborting
140129 18:08:53 [Note] /usr/libexec/mysqld: Shutdown complete
140129 18:18:18 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
在另一个问题中提供的解决方案似乎是“创建交换文件”之一。我检查了我的服务器,似乎已经有一个活动的交换文件:
# swapon -s
Filename Type Size Used Priority
/dev/xvdc1 partition 499992 34876 -1
而且,看看那个输出,这是我认为我需要的大小(512Mb)。为了完整起见,以下是我的/etc/fstab
文件的内容:
/dev/xvda1 / ext3 defaults,noatime,barrier=0 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/xvdc1 none swap sw 0 0
那么我是否遗漏了一些东西,或者我是否已经有一个大约 512Mb 的工作交换文件,该文件相当空,因此应该能够处理对 128Mb 的请求?我应该将 InnoDB 缓冲区的大小减小到 64Mb 吗?是否会出现与缩小此缓冲区相关的任何问题?
(我的 Rackspace 服务器是可用的最小的服务器,它有 512Mb 的 RAM。每当我top
在服务器上运行时,它似乎有 50 到 80 Mb 的空闲空间。)