Ubuntu mysql崩溃 - InnoDB:无法为缓冲池分配内存

时间:2016-06-19 20:37:40

标签: mysql ubuntu crash innodb

所以我的mysql服务今天在我的ubuntu droplet服务器上崩溃了,它有20GB的存储空间和512mb的内存,这似乎是因为无法为mysql分配内存。 我已经读过我可以增加/减少innodb_buffer_pool_size的内存,但这会解决问题吗?什么是保持mysql服务崩溃的最佳选择?

2016-06-19 06:47:18 23040 [Note] InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
2016-06-19 06:47:18 23040 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2016-06-19 06:47:18 23040 [ERROR] Plugin 'InnoDB' init function returned error.
2016-06-19 06:47:18 23040 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2016-06-19 06:47:18 23040 [ERROR] Unknown/unsupported storage engine: InnoDB
2016-06-19 06:47:18 23040 [ERROR] Aborting

2 个答案:

答案 0 :(得分:0)

根本不分配太多内存。所以MySQL为核心和每个连接分配内存。

所以你可以运行这些查询找到总内存量

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'innodb_additional_mem_pool_size';
SHOW VARIABLES LIKE 'innodb_log_buffer_size';
SHOW VARIABLES LIKE 'thread_stack';
SET @kilo_bytes = 1024;
SET @mega_bytes = @kilo_bytes * 1024;
SET @giga_bytes = @mega_bytes * 1024;
SET @innodb_buffer_pool_size = 2 * @giga_bytes;
SET @innodb_additional_mem_pool_size = 16 * @mega_bytes;
SET @innodb_log_buffer_size = 8 * @mega_bytes;
SET @thread_stack = 192 * @kilo_bytes;
SELECT
( @@key_buffer_size + @@query_cache_size + @@tmp_table_size
+ @innodb_buffer_pool_size + @innodb_additional_mem_pool_size
+ @innodb_log_buffer_size
+ @@max_connections * (
@@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size
+ @@join_buffer_size + @@binlog_cache_size + @thread_stack
) ) / @giga_bytes AS MAX_MEMORY_GB;

答案 1 :(得分:0)

my.cnf包含各种设置。 512MB的RAM 很小。这需要持有操作系统,MySQL代码和许多其他东西。要求buffer_pool的128MB太多了。试试50M。可能还应该在my.cnf中降低其他内容。向我们展示整个my.cnf以供进一步讨论。