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

标签 mysql ubuntu crash innodb

因此,我的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/

相关文章:

mysql - 从嵌套选择结果中删除问题

crash - 如何计算崩溃的 "cost"?

mysql - MySQL Group By 对多列的奇怪行为

mysql - 如何获取从一个表到另一个表的所有差异(大量行〜500k)

mysql - 通过 SSH 使用 R (RMySQL) 连接 MySQL

ubuntu - 谷歌云虚拟机中的 apt-get 命令

eclipse - eclipse .classpath 可以支持不同环境的多个 JRE 吗?

.net - pkg-config 如何决定默认添加哪个查找路径?

Java 游戏在启动时崩溃两次,没有错误消息

iphone - iPad 应用程序的奇怪崩溃报告