因此,我的mysql服务今天在我的具有20gb存储和512mb内存的ubuntu Droplet服务器上崩溃了,这似乎是因为未能为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
最佳答案
根本不分配太多内存。因此,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;
关于mysql - Ubuntu mysql崩溃-InnoDB:无法为缓冲池分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37911602/