erreur fatale mysql: ne peut allouer de mémoire pour le pool de mémoire tampon

j'ai ce journal d'erreurs de MySQL, une idée? Site Web fonctionne pendant un certain temps et puis je obtiens MySQL arrêt complet après quelques heures.

140919 10:48:27 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
140919 10:48:27 [Note] Plugin 'FEDERATED' is disabled.
140919 10:48:27 InnoDB: The InnoDB memory heap is disabled
140919 10:48:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
140919 10:48:27 InnoDB: Compressed tables use zlib 1.2.3.4
140919 10:48:28 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
140919 10:48:28 InnoDB: Completed initialization of buffer pool
140919 10:48:28 InnoDB: Fatal error: cannot allocate memory for the buffer pool
140919 10:48:28 [ERROR] Plugin 'InnoDB' init function returned error.
140919 10:48:28 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140919 10:48:28 [ERROR] Unknown/unsupported storage engine: InnoDB
140919 10:48:28 [ERROR] Aborting

140919 10:48:28 [Note] /usr/sbin/mysqld: Shutdown complete

140919 10:48:28 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
140919 10:48:28 [Note] Plugin 'FEDERATED' is disabled.
140919 10:48:28 InnoDB: The InnoDB memory heap is disabled
140919 10:48:28 InnoDB: Mutexes and rw_locks use GCC atomic builtins
140919 10:48:28 InnoDB: Compressed tables use zlib 1.2.3.4
140919 10:48:28 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
140919 10:48:28 InnoDB: Completed initialization of buffer pool
140919 10:48:28 InnoDB: Fatal error: cannot allocate memory for the buffer pool
140919 10:48:28 [ERROR] Plugin 'InnoDB' init function returned error.
140919 10:48:28 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140919 10:48:28 [ERROR] Unknown/unsupported storage engine: InnoDB
140919 10:48:28 [ERROR] Aborting

140919 10:48:28 [Note] /usr/sbin/mysqld: Shutdown complete
30
demandé sur Super Chafouin 2014-09-22 05:37:24

3 réponses

TLDR;

Mysql ne peut pas redémarrer car il est sorti de mémoire, vérifiez que vous avez configuré un fichier swap approprié.

n'a pas aidé? Si ce n'est pas votre problème, les questions plus qualifiées pour poursuivre la recherche sont:

arrière-plan

j'ai eu exactement ce problème sur le tout premier système que j'ai mis en place sur EC2, caractérisé par le site wordpress hébergé il va descendre à l'occasion avec"Error establishing database connection".

les registres montraient la même erreur que celle affichée par L'OP. Ma lecture de l'erreur (horodateurs supprimé) est le suivant:

  • erreur de mémoire: InnoDB: Fatal error: cannot allocate memory for the buffer pool
  • InnoDB ne peut pas démarrer sans assez de mémoire [ERROR] Plugin 'InnoDB' init function returned error. [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. [ERROR] Unknown/unsupported storage engine: InnoDB [ERROR] Aborting
  • mysqld se ferme, ce qui dans ce contexte, signifie vraiment ne pas redémarrer! [Note] /usr/sbin/mysqld: Shutdown complete

vérification /var/log/syslog et recherche mysql yields:

Out of memory: Kill process 15452 (mysqld) score 93 or sacrifice child
Killed process 15452 (mysqld) total-vm:888672kB, anon-rss:56252kB, file-rss:0kB
init: mysql main process (15452) killed by KILL signal
init: mysql main process ended, respawning
type=1400 audit(1443812767.391:30): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=21984 comm="apparmor_parser"
init: mysql main process (21996) terminated with status 1
init: mysql main process ended, respawning
init: mysql post-start process (21997) terminated with status 1
<repeated>

Note: Vous pouvez avoir à gunzip et rechercher dans les journaux archivés si l'erreur s'est produite avant que les journaux aient été tournés par cron.

Solution

dans mon cas, le problème sous-jacent était que j'avais négligé de configurer un fichier swap.

vous pouvez vérifier si vous en avez un configuré en lançant free -m .

total used free shared buffers cached Mem: 604340 587364 16976 0 29260 72280 -/+ buffers/cache: 485824 118516 Swap: 0 0 0

dans l'exemple ci-dessus, Swap: 0 indique aucun fichier swap.

Tutoriels sur la mise en place:

notez que plus grand n'est pas nécessairement mieux! De la Ubuntu "guide de 1519180920" :

le "rendements décroissants" signifie que si vous avez besoin de plus d'espace de pagination que le double de la taille de votre RAM , vous feriez mieux d'ajouter plus de RAM que L'accès disque dur (HDD) est environ 103 plus lent que L'accès RAM, donc quelque chose qui prendrait 1 seconde, prend soudainement plus de 15 minutes ! Et encore plus d'une minute sur un disque dur rapide (SSD)...


concernant les autres réponses ici...

The InnoDB memory heap is disabled

ce n'est pas vraiment une erreur, juste une indication que InnoDB utilise l'allocateur de mémoire interne du système au lieu du sien. La valeur par défaut est oui/1, et qui est acceptable pour la production.

selon les docs, cette commande est dépréciée, et sera supprimée dans les versions MySQL ci-dessus 5.6 (et je suppose MariaDB):

http://dev.mysql.com/doc/refman/5.6/en/innodb-performance-use_sys_malloc.html

merci à: Ruben Schade commentaire

[Note] Plugin 'FEDERATED' is disabled.

le message à propos de FEDERATED disabled n'est pas une erreur. Cela signifie simplement que le moteur fédéré n'est pas activé pour votre serveur mysql. Il n'est pas utilisé par défaut. Si vous n'en avez pas besoin, ne vous souciez pas de ce message.

voir: https://stackoverflow.com/a/16470822/2586761

47
répondu ptim 2017-05-23 12:34:29

la solution N'est pas plus d'espace, le problème est Apache Web server pas mysql, en fait vous devez diminuer innodb-buffer-pool-size

ce tampon est utilisé par le processus mysql dès le début, donc quand Apache a besoin de plus de ressources, le noyau va supprimer la RAM des services, ce qui signifie arrêter mysql au lieu de planter le serveur.

ajouterait également un CRON pour vérifier l'état de la base de données et le redémarrer si vous ne voulez pas passer à ngnx ou httplight.

3
répondu nodws 2017-03-01 16:06:38

j'ai trouvé cette réponse ajoute à la discussion: https://www.digitalocean.com/community/questions/mysql-server-keeps-stopping-unexpectedly?answer=26021

en bref, en plus de définir innodb_buffer_pool_size à quelque chose de raisonnable comme 64M, vous pouvez aussi avoir besoin de modifier /etc/apache2/mods-enabled/mpm_prefork.conf pour réduire le nombre de connexions lancées par apache;

<IfModule mpm_prefork_module>
    StartServers     3
    MinSpareServers  3
    MaxSpareServers  5
    MaxRequestWorkers 25
    MaxConnectionsPerChild   1024
</IfModule>
1
répondu Joe T 2018-02-19 21:44:08