buntu: 12.04 LTS (Linux mysql02 3.2.0-40-generic # 64-Ubuntu SMP Mon 25 mars 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux)
MySQL: Ubuntu distribution 5.5.31
Apparmor: RETIRE!
Le serveur fonctionne à toute vitesse depuis plus d'un an. Puis ce lundi, MySQL a commencé à échouer. Le problème a été causé par une mise à jour et nous ne pouvons pas le comprendre. Nous avons même essayé de revenir à MySQL 5.5.30 mais sans succès. Nous sommes rentrés à 5.5.31.
Entrées du journal des erreurs MySQL:
130430 7:55:46 [ERROR] Error in accept: Too many open files
130430 7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/fclvod.frm' (errno: 24)
130430 7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/fcnote.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/ffcont.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/ffcontv.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/ffnote.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/frcfcl.frm' (errno: 24)
Il semble que nous rencontrons le problème ulimit. Nous avons complètement supprimé APPARMOR. Nous avons augmenté le / etc/security/limits.conf et toujours pas de chance:
# Out of desperation....
* soft nofile 49152
* hard nofile 65536
# No effect!?!!?
#mysql soft nofile 49152
#mysql hard nofile 65536
Et pour montrer le limits.conf fonctionne:
root@mysql02:/etc/security# ulimit -Sa | grep "open files"
open files (-n) 49152
root@mysql02:/etc/security# ulimit -Ha | grep "open files"
open files (-n) 65536
Et voici les entrées importantes dans my.cnf
[mysqld_safe]
open_files_limit = 16384
[mysqld]
open_files_limit = 16384
Toutefois:
root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit | 1024
Nous sommes totalement stupéfaits. Toute assistance sera grandement appréciée.
OS: déploiements Ubuntu (Debian)
Option serveur MySQL: open-files-limit
Il semble que la Debian pstart n’utilise pas les paramètres définis dans /etc/security/limits.conf , alors quand vous lancez mysql via la commande service (et ainsi, sous upstart), il remplace les limites définies et utilise la valeur par défaut 1024.
La solution est de modifier le fichier mysql.conf qui définit le service upstart, il se trouve dans /etc/init/mysql.conf et ajoutez les lignes suivantes avant le bloc de pré-démarrage :
# NB: Upstart scripts do not respect
# /etc/security/limits.conf, so the open-file limits
# settings need to be applied here.
limit nofile 32000 32000
limit nproc 32000 32000
Références:
Eu le même problème sur Ubuntu 15.10.
https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 - a apporté la solution:
(dans mon cas) sinon, créez /lib/systemd/system/mysql.service et copiez le contenu de ce fichier dans ce fichier https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+ bug/1434758/comments/11 et ajoutez les deux lignes quelque part dans le fichier
LimitNOFILE=infinity
LimitMEMLOCK=infinity
si un ou les deux fichiers existants, vérifiez si ces deux lignes sont incluses:
LimitNOFILE=infinity
LimitMEMLOCK=infinity
systemctl daemon-reload
... et tout devrait bien se passer.
Comme aucune des solutions ci-dessus ne résout le problème pour moi (cela entraîne uniquement un manque de mémoire du système), voici la solution que j'ai trouvée:
Dans /etc/mysql/my.conf
, vous devez augmenter open_files_limit de MySQL. Ajoutez donc temporairement ceci à la configuration et redémarrez MySQL.
[mysqld]
open_files_limit = 100000
Sudo /etc/init.d/mysql restart
Après avoir exécuté l’opération qui vous donne l’erreur trop de fichiers ouverts, vous pouvez rétablir votre configuration par défaut et redémarrer MySQL.
Merci pour la solution de contournement. Mais pour moi, la question a été éclipsée par les deux autres faits.
Après avoir résolu le problème InnoDB, il crachait toujours
mysql> SHOW DATABASES;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 24)
Je devais démarrer mysqld dans la console root et redémarrer manuellement
/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --force
Ensuite, le serveur a commencé à afficher les bases de données, mais ne pouvait pas accéder à certaines tables. Votre solution de contournement avec des limites plus élevées a corrigé le reste des problèmes, merci!