web-dev-qa-db-fra.com

MySQL ne peut pas ouvrir les fichiers après la mise à jour du serveur: errno: 24

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.

16
Van

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:

19
Van

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:

  1. vérifie si /lib/systemd/system/mysql.service ou /lib/systemd/system/mysqld.service est existant
  2. (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
    
  3. si un ou les deux fichiers existants, vérifiez si ces deux lignes sont incluses:

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  4. exécuter systemctl daemon-reload

... et tout devrait bien se passer.

4
Hendrik Eggers

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.

1
mniess

Merci pour la solution de contournement. Mais pour moi, la question a été éclipsée par les deux autres faits.

  1. Mon répertoire de données est différent de l'installation par défaut. Pour de multiples raisons, à la fois historiques et techniques.
  2. Je mettais à niveau une très ancienne installation, qui passait par un certain nombre de ports aller et retour. Lors du premier démarrage d'une nouvelle version de MySQL 5.5, le moteur InnoDB n'était pas activé (l'implémentation interne était désactivée dans le fichier de configuration, mais le plug-in qui était disponible dans les versions précédentes n'était pas présent dans la version 5.5) et la marque de mise à niveau était créée sans mise à niveau effective. toutes les tables.

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!

0
AnrDaemon