一些背景知识。我在VPS中托管了一个WordPress站点,有时MYSQL下载错误“建立数据库连接错误”。我花了一些时间研究并认为问题是由于MySQL重新启动时,它无法分配足够的RAM来继续。
我相信我可以通过增加物理RAM或交换来改善这种情况。但我对这篇文章的问题是,为什么MySQL需要重启?我的网站流量很低,似乎数据库没有损坏。
以下是此问题的完整日志:
答案 0 :(得分:2)
When Number of Processes Running Now 0
表示MySQL没有运行。所以守护进程mysqld_safe
“让你受宠”并启动MySQL
答案 1 :(得分:0)
您已将非常低的内存128MB分配给innodb_buffer_pool_size(默认RAM)。所以你应该指定约。如果你使用innodb引擎,这个变量的总RAM的80%,因为mysql使用这个变量的内存来缓存索引以及innodb引擎中的数据。
因此,在配置文件中将至少1 GB的RAM(应该是innodb总ram的80%)更新为innodb_buffer_pool_size
并重新启动mysql服务。
<强>更新强>
您有1 GB RAM:您可以将800M RAM(或&gt; = 500M)分配给innodb_buffer_pool_size
。
当运行进程0的数量时,MySQL会自动重启:根据你共享的错误...这个错误是在mysql服务启动时发生的,服务器无法用这么少的RAM启动mysql服务。 / p>
160103 18:39:55 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
160103 18:39:55 InnoDB: Completed initialization of buffer pool
160103 18:39:55 InnoDB: Fatal error: cannot allocate memory for the buffer pool
答案 2 :(得分:0)
我在CentOS 6.9上的MySQL遇到类似的问题。这是由于另一个PHP进程导致的内存不足而不是MySQL引起的。 MySQL只是一个受害者。
您可以查看内核消息。此消息的位置可能特定于OS。对于CentOS 6.x,它们位于/ var / log / messages中。
以下是/ var / log / messages中的一些相关消息:
Jul 25 20:34:46 myserver kernel: Out of memory: Kill process 21467 (mysqld) score 30 or sacrifice child
Jul 25 20:34:46 myserver kernel: Killed process 21467, UID 497, (mysqld) total-vm:757004kB, anon-rss:17728kB, file-rss:320kB
您可以运行以下命令来查看内核是否耗尽了内存:
cat /var/log/messages | grep out_of_memory