当我在 unbuntu 服务器上启动 mysql 时,我会收到一条消息。
121122 17:39:37 [Note] Plugin 'FEDERATED' is disabled.
121122 17:39:37 InnoDB: The InnoDB memory heap is disabled
121122 17:39:37 InnoDB: Mutexes and rw_locks use GCC atomic builtins
121122 17:39:37 InnoDB: Compressed tables use zlib 1.2.3.4
121122 17:39:37 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
121122 17:39:37 InnoDB: Completed initialization of buffer pool
121122 17:39:37 InnoDB: Fatal error: cannot allocate memory for the buffer pool
121122 17:39:37 [ERROR] Plugin 'InnoDB' init function returned error.
121122 17:39:37 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
121122 17:39:37 [ERROR] Unknown/unsupported storage engine: InnoDB
121122 17:39:37 [ERROR] Aborting
121122 17:39:37 [Note] mysqld: Shutdown complete
有几次我收到一条消息说插件已被禁用。
我使用 webmin 来配置它。这会是个问题吗?
答案1
正如 CloudWeavers 所述,您没有足够的可用内存(包括交换)。如果您确实想在此配置下运行,请定义一个额外的交换文件,例如
dd if=/dev/zero of=/swap.img bs=1M count=512
mkswap -f /swap.img
echo '/swap.img none swap sw 0 0' >> /etc/fstab
swapon -a
sudo chown root:root /swap.img
sudo chmod 0600 /swap.img
在您的根分区上放置一个 512MB 的交换文件(即实际文件)(这实际上是一种让您开始的黑客行为 - 这不是最佳实践的配置)或将您的值降低innodb_buffer_pool_size
到较小的值(再次不推荐,这是 InnoDB 引擎的一个重要的调整变量,不应轻易更改)
sed -i 's/^.+innodb_buffer_pool_size.+/innodb_buffer_pool_size=32M/' /etc/my.cnf
service mysqld restart
答案2
您的问题是:
InnoDB: mmap(137363456 bytes) failed; errno 12
而且,如果你使用 GNU/Linux,我们可以理所当然地认为:
Errno 12: ENOMEM
这意味着 InnoDB 初始化在内存映射期间失败。您没有足够的可用内存。我猜您没有定义任何交换(使用“free -m”检查)并且您没有 128MB 的可用空间用于 InnoDB 插件?
此错误会自动导致插件进入“禁用”状态并阻止您使用 innodb 表。