问题描述
由于数据库在云上放着,在写项目的过程中组里成员突然发现数据库连不上了,然后我就登陆服务器看了一眼:
- 数据库连不上
- 然后我重启数据库的时候会提示一下:
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
进行排查,发现没有啥有效信息 - 之后适用
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
解决办法出处