J'ai mis en place un micro serveur de instance sur EC2 en fonction de ce que j'ai lu ici
Le serveur mysql échoue fréquemment et pour la troisième fois, le serveur mysql est parti. Les journaux ne montrent que
120423 09:13:38 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
120423 09:14:27 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120423 9:14:27 [Note] Plugin 'FEDERATED' is disabled.
120423 9:14:27 InnoDB: The InnoDB memory heap is disabled
120423 9:14:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120423 9:14:27 InnoDB: Compressed tables use zlib 1.2.3
120423 9:14:27 InnoDB: Using Linux native AIO
120423 9:14:27 InnoDB: Initializing buffer pool, size = 512.0M
InnoDB: mmap(549453824 bytes) failed; errno 12
120423 9:14:27 InnoDB: Completed initialization of buffer pool
120423 9:14:27 InnoDB: Fatal error: cannot allocate memory for the buffer pool
120423 9:14:27 [ERROR] Plugin 'InnoDB' init function returned error.
120423 9:14:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120423 9:14:27 [ERROR] Unknown/unsupported storage engine: InnoDB
120423 9:14:27 [ERROR] Aborting
Qu'est-ce que c'est vraiment failed; errno 12
? Et comment pourrais-je donner plus d'espace / mémoire ou tout ce qui est nécessaire pour résoudre ce problème.
Je corrige ce problème à chaque fois en redémarrant tout le système et en supprimant tous les journaux et en redémarrant le serveur mysql. Mais je sais que quelque chose ne va pas avec ma configuration.
Aussi mon `my.cnf 'est comme ci-dessous:
[mysqld]
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
# max_allowed_packet=500M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
innodb_buffer_pool_size = 512M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
mysql
amazon-ec2
pmoubed
la source
la source
Réponses:
J'ai rencontré le même problème lorsque j'ai essayé d'exécuter un wordpress sur ma micro instance sans RDS.
L'ajout d'une page Swap a résolu le problème pour moi.
Vous pouvez suivre les étapes ci-dessous pour configurer l'espace d'échange.
Si cela ne fonctionne toujours pas pour vous, envisagez d'utiliser le service RDS.
===============================================
J'ai copié le contenu du blog pour mémoire. Le crédit revient à l'auteur du blog pmoubed :
Espace d'échange de micro-instance Amazon EC2 - Linux
J'ai une instance Amazon EC2 Linux Micro. Étant donné que les instances Micro ne disposent que de 613 Mo de mémoire, MySQL plantait de temps en temps. Après une longue recherche sur MySQL, Micro Instance et Gestion de la mémoire, j'ai découvert qu'il n'y avait pas d'espace SWAP par défaut pour l'instance Micro. Donc, si vous voulez éviter le crash, vous devrez peut-être configurer un espace d'échange pour votre micro-instance. En fait, en termes de performances, il est préférable d'activer le swap.
Les étapes ci-dessous montrent comment créer un espace d'échange pour votre instance Micro. Je suppose que vous avez un compte AWS avec une instance Micro en cours d'exécution.
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile
/swapfile swap swap defaults 0 0
à/etc/fstab
L'étape 4 est nécessaire si vous souhaitez activer automatiquement le fichier d'échange après chaque redémarrage.
Quelques commandes utiles liées à l'espace SWAP:
Références:
la source
J'ai également eu ce problème sur une micro-instance Amazon EC2. J'ai essayé de réduire l'utilisation de la mémoire d'inno_db en ajoutant ce qui suit à
/etc/my.cnf
Cela n'a pas fonctionné, j'ai essayé de le réduire à 16M et cela ne fonctionnait toujours pas. Ensuite, j'ai réalisé que l'instance n'avait pratiquement aucune mémoire libre. J'ai donc essayé de redémarrer Apache
Et tout a bien fonctionné. Peut-être qu'une autre solution est de configurer apache pour ne pas consommer autant de mémoire.
la source
Il semble que vous demandiez 128 Mo de mémoire pour innodb_buffer_pool_size dans le fichier my.cfg que vous affichez dans le message, mais MySQL pense que vous demandez 512 Mo de mémoire:
Quelques lignes plus bas, le message d'erreur vous indique que MySQL ne démarrera pas car il ne peut pas réserver suffisamment de mémoire (512 Mo) pour le pool de mémoire tampon InnoDB:
Cela soulève trois questions:
Vous pouvez répondre 1.
Quant à 2., il y a quelques endroits différents où les fichiers d'options MySQL peuvent être localisés. Les fichiers trouvés ultérieurement remplacent les options spécifiées dans les fichiers trouvés précédemment. Voir
http://dev.mysql.com/doc/refman/5.5/en/option-files.html
Le problème 3. peut être dû à une condition de mémoire insuffisante qui se produit quelque temps après le démarrage. Vous devriez voir une indication de cela plus loin dans les journaux si tel est le cas.
Enfin, mais sans aucun rapport, utilisez-vous des instances basées sur EBS? C'est généralement fortement recommandé pour les serveurs de base de données (en fait, pour toute instance sauf circonstances particulières). Pour en savoir plus, voir
https://stackoverflow.com/a/3630707/141172
la source
Pour moi, ce problème a été corrigé en ajoutant un volume de swap à mon instance EC2. Mes services consommaient simplement toute la mémoire de la boîte et plantaient. Pas quelque chose auquel j'étais habitué, étant un administrateur RedHat / CentOS pendant des années - Anaconda fait BEAUCOUP de travail que l'instance gratuite Ubuntu EC2 ne fait pas.
J'ai simplement créé un volume de 2 Go via la console Web, je l'ai attaché à mon instance, et j'ai fait "mkswap / dev / [peu importe]", édité / etc / fstab et le plantage s'est arrêté.
Ces instances ne s'installent PAS comme une installation de système d'exploitation basée sur un support à laquelle la plupart d'entre nous sommes habitués - elle est dépouillée sans paquet, sans système de fichiers approprié et des choses comme AppArmor, qui causent toutes sortes de problèmes si vous n'en êtes pas conscient et / ou ne sais pas comment le configurer.
la source
Le problème est que le serveur n'a pas assez de mémoire pour allouer au processus MySQL. Il existe quelques solutions à ce problème.
(1) Augmentez la RAM physique. L'ajout de 1 Go de RAM supplémentaire résoudra le problème. (2) Allouer de l'espace SWAP. L'instance Digital Ocean VPS n'est pas configurée pour utiliser l'espace d'échange par défaut. En allouant 512 Mo d'espace de swap, nous avons pu résoudre ce problème. Pour ajouter de l'espace d'échange à votre serveur, procédez comme suit:
Réduisez la taille de la taille du pool de mémoire tampon MySQL
Veuillez également vérifier votre espace disque. Assurez-vous d'avoir suffisamment d'espace.
la source
RÉPONSE FACILE:
RÉPONSE DÉTAILLÉE:
C'est une question importante, en particulier pour les personnes qui utilisent un très petit VPS, par exemple 1 Go de RAM ou moins. Si MySQL abandonne, cela peut être un problème avec la configuration de votre serveur (Apache | nginx) ou avec la configuration MySQL. Les attaques DOS peuvent provoquer une augmentation de l'utilisation des ressources système (voir l'image). Le résultat final est que le processus MySQL est arrêté par le noyau. Pour une solution à long terme, vous devriez envisager d'optimiser vos configurations Apache ou MySQL.
Il y a plusieurs autres discussions Stack Overflow ces sujets ainsi que le manuel MySQL et le blog Percona:
Manuel MySQL - Comment MySQL utilise la mémoire:
https://dev.mysql.com/doc/refman/8.0/en/memory-use.html
Percona - Meilleures pratiques pour configurer l'utilisation optimale de la mémoire MySQL:
https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/
Comment optimiser les performances de MySQL à l'aide de MySQLTuner:
https://www.linode.com/docs/databases/mysql/how-to-optimize-mysql-performance-using-mysqltuner/
Configuration de l'utilisation de la mémoire Apache:
/server/254436/apache-memory-usage-optimization
Manuel Apache sur le réglage des performances:
https://httpd.apache.org/docs/2.4/misc/perf-tuning.html
Réglage du serveur Apache:
https://www.linode.com/docs/web-servers/apache-tips-and-tricks/tuning-your-apache-server/
Cependant, en ce qui concerne votre question initiale, oui, vous pouvez créer un script pour une solution temporaire qui vérifie si le service MySQL est chargé et actif et redémarrera MySQL s'il n'est pas chargé et actif.
Vous n'avez pas mentionné le système d'exploitation que vous utilisez. Cela aiderait à vous donner une commande spécifique. Je vais vous donner un exemple pour CentOS linux.
Regardez la sortie suivante de la commande
systemctl status mysql
. Vous pouvez voir en haut que le service est chargé et actif .Si le service n'est pas chargé, une commande telle que:
fera le tour de redémarrer le processus. Vous pouvez cron que:
Cependant, dans le cas où mysql est chargé , mais que le service n'est pas actif , votre cron ne fera rien. Vous devez donc utiliser une commande plus détaillée telle que:
* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld
Dans ce cas, si le service est chargé mais inactif tel que l'état selon lequel une attaque DOS peut quitter votre service mysql, la commande redémarrera également mysql. L'utilisation de l'
--quiet
indicateur spécifie simplement la commande pour renvoyer un code d'état, sans rien afficher à l'écran. Si vous omettez l'--quiet
indicateur, vous verrez une sortie d'état de l'unactive
ou l' autreinactive
.Vous pouvez également créer un espace de swap pour ajouter plus de ressources RAM disponibles à votre serveur, telles que:
la source
Utilisez l'une des solutions suivantes:
Augmentez la RAM physique. L'ajout de 1 Go de RAM supplémentaire résoudra le problème.
Allouez de l'espace SWAP en utilisant les modifications de configuration ci-dessous:
config
la source