Mysql因爲內存不夠而不能啓動

問題描述

由於數據庫在雲上放着,在寫項目的過程中組裏成員突然發現數據庫連不上了,然後我就登陸服務器看了一眼:

  1. 數據庫連不上
  2. 然後我重啓數據庫的時候會提示一下:
    Job for mysqld.service failed because a fatal signal was delivered to the control process. See "systemctl status mysqld.service" and "journalctl -xe" for details.
    然後我使用journalctl -xe進行排查,發現沒有啥有效信息
  3. 之後適用tail -n 20 /var/log/mysqld.log去看數據庫的日誌,發現了以下信息:
2020-04-29T01:16:10.459072Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.19) starting as process 835
2020-04-29T01:16:16.885066Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.19) starting as process 1020
2020-04-29T01:16:17.181143Z 0 [ERROR] [MY-012681] [InnoDB] mmap(137363456 bytes) failed; errno 12
2020-04-29T01:16:17.181305Z 1 [ERROR] [MY-012956] [InnoDB] Cannot allocate memory for the buffer pool
2020-04-29T01:16:17.181427Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
2020-04-29T01:16:17.182891Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2020-04-29T01:16:17.183205Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2020-04-29T01:16:17.183382Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-04-29T01:16:17.189397Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19)  MySQL Community Server - GPL.

問題原因

從上面可以看到,是因爲mmap(啊,這個mmap我面試騰訊的時候還問過)申請不到內存,可以理解爲內存不夠了
然後先用free看一下當前讀的內存

              total        used        free      shared  buff/cache   available
Mem:        1883724     1298816      400560      106920      184348      364396
Swap:             0           0           0

發現果然是swap的問題

解決辦法

增加swap

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 #增加1G的SWAP進去
sudo mkswap /swapfile
sudo swapon /swapfile

之後重啓mysql
解決辦法出處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章