【问题标题】:Why MySQL Restarted When Number of Processes Running Now 0为什么现在运行的进程数为 0 时 MySQL 会重新启动
【发布时间】:2016-01-06 05:04:37
【问题描述】:

一些背景。我在 VPS 中托管了一个 WordPress 站点,有时 MYSQL 出现错误“建立数据库连接时出错”。我花了一些时间研究并认为问题是由于 MySQL 重新启动时,它无法分配足够的 RAM 来继续。

我相信我可以通过增加物理 RAM 或交换来改善这种情况。但我对这篇文章的问题是,为什么 MySQL 需要自行重启?我的网站流量非常低,数据库似乎没有损坏。

以下是此问题的完整日志:

  • 160103 18:39:54 mysqld_safe 现在运行的进程数:0
  • 160103 18:39:54 mysqld_safe mysqld 重启
  • 160103 18:39:55 [注意] /usr/libexec/mysqld (mysqld 5.5.44-MariaDB) 从进程 22061 开始 ...
  • 160103 18:39:55 InnoDB:InnoDB 内存堆已禁用
  • 160103 18:39:55 InnoDB:互斥锁和 rw_locks 使用 GCC 原子内置函数
  • 160103 18:39:55 InnoDB:压缩表使用 zlib 1.2.7
  • 160103 18:39:55 InnoDB:使用 Linux 原生 AIO
  • 160103 18:39:55 InnoDB:初始化缓冲池,大小=128.0M
  • InnoDB:mmap(137756672 字节)失败;错误号 12
  • 160103 18:39:55 InnoDB:缓冲池初始化完成
  • 160103 18:39:55 InnoDB:致命错误:无法为缓冲池分配内存
  • 160103 18:39:56 [错误] 插件“InnoDB”初始化函数返回错误。
  • 160103 18:39:56 [错误] 插件“InnoDB”注册为存储引擎失败。
  • 160103 18:39:56 [错误] mysqld:内存不足(需要 128917504 字节)
  • 160103 18:39:56 [错误] mysqld:内存不足(需要 96681984 字节)
  • 160103 18:39:56 [错误] mysqld:内存不足(需要 72499200 字节)
  • 160103 18:39:56 [注意] 插件“反馈”已禁用。
  • 160103 18:39:56 [错误] 未知/不支持的存储引擎:InnoDB
  • 160103 18:39:56 [错误] 中止

【问题讨论】:

    标签: mysql wordpress


    【解决方案1】:

    When Number of Processes Running Now 0 表示 MySQL 没有运行。所以守护进程mysqld_safe“让你帮个忙”并启动MySQL

    【讨论】:

      【解决方案2】:

      您为 innodb_buffer_pool_size 分配了非常低的 128MB RAM(这是默认 RAM)。所以你应该分配大约。如果您使用的是 innodb 引擎,则此变量的总 RAM 的 80%,因为 mysql 最初使用此变量中的内存来缓存索引以及 innodb 引擎中的数据。

      所以在你的配置文件中更新至少 1 GB RAM(应该是 innodb 总 RAM 的 80%)到 innodb_buffer_pool_size 并重新启动 mysql 服务。

      更新:

      您有 1 GB RAM:您可以将 800M RAM(或 >=500M)分配给 innodb_buffer_pool_size

      当运行进程数为 0 时,MySQL 将自动重启:根据您共享的错误...此错误发生在 mysql 服务启动时,服务器无法以如此少的 RAM 启动 mysql 服务。

      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
      

      【讨论】:

        【解决方案3】:

        我在 CentOS 6.9 上遇到了类似的 MySQL 问题。它是由另一个 PHP 进程导致的内存不足引起的,而不是由 MySQL 引起的。 MySQL 只是受害者。

        您可以查看内核消息。此消息的位置可能特定于操作系统。对于 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-23
          • 1970-01-01
          • 1970-01-01
          • 2018-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多