Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/05/2018, à 15:11

ledid33

Mysql LOCK TABLES

Bonjour,

J'ai un problème de sauvegarde de ma base de donnée et ne trouve pas de solution

mysqldump: Got error: 1016: Can't open file: './www_enquetes/lime_old_tokens_276935_20180201085851.frm' (errno: 24 - Too many open files) when using LOCK TABLES

J'ai rajouté cette ligne dans ma conf

open_files_limit  = 20000

merci pour votre aide


Modération : merci d'utiliser les balises code (explications ici).

Dernière modification par cqfd93 (Le 31/05/2018, à 08:11)

Hors ligne

#2 Le 30/05/2018, à 15:51

bruno

Re : Mysql LOCK TABLES

Bonjour,

Augmenter cette limite pourrait être une solution en pensant a redémarrer mysql après modification
La limite par défaut devrait normalement être largement suffisante. Il faudrait comprendre pourquoi ton serveur mysql est aussi « chargé ».

Sinon essaie l'otion --lock-all-tables, ou --single-transaction avec mysqldump en t'assurant que les bases ne sont pas utilisées pendant cette opération (cf. man mysqldump).

Hors ligne

#3 Le 30/05/2018, à 16:05

ledid33

Re : Mysql LOCK TABLES

ok merci pour l'info je vais essayer cette option  --lock-all-tables
sachant que j'avais déjà mis --lock-tables=false comme option mais sans résultat

merci

Hors ligne

#4 Le 31/05/2018, à 08:09

ledid33

Re : Mysql LOCK TABLES

mauvaise nouvelle : ce matin j'ai encore le même message

mysqldump: Got error: 1016: Can't open file: './www_enquetes/lime_old_tokens_276935_20180201085851.frm' (errno: 24 - Too many open files) when using LOCK TABLES

je vais essayer ça  : --single-transaction   (merci Bruno)

Dans mon cron.daily

mysqldump -B -Q bdd -u login -pmotdepasse --single-transaction -r /chemin1/chemin2/mysql/bdd.sql

Si je lance cette commande j'ai cette réponse  :

mysqldump: [Warning] Using a password on the command line interface can be insecure.

normal mon mdp est en clair;-)


Modération : merci d'utiliser les balises code (explications ici).

Dernière modification par cqfd93 (Le 31/05/2018, à 08:12)

Hors ligne

#5 Le 31/05/2018, à 09:13

bruno

Re : Mysql LOCK TABLES

Pour le mot de passe c'est juste un avertissement. Si le fichier dans cron.daily n'est lisible que par root, ce n'est pas grave.

Sinon tu peux utiliser le compte spécial de maintenance debian-syst-maint :

mysqldump --defaults-file=/etc/mysql/debian.cnf --quote-names nom_de_la_base -r fichier_de_destination.sql

Assure-toi de lancer ta tâche cron à un moment de la journée où le serveur est plutôt inactif (les cron.daily sont lancés par défaut vers 6h00 du matin, cf. /etc/crontab). Il serait intéressant de connaître le nombre de tables dans la base de données que tu tentes de sauvegarder.

Hors ligne

#6 Le 31/05/2018, à 13:45

ledid33

Re : Mysql LOCK TABLES

Dans mon cron.daily j'ai 12 sauvegardes mysql  et la base qui pose problème a 552 tables

Hors ligne

#7 Le 31/05/2018, à 14:31

bruno

Re : Mysql LOCK TABLES

Ce qui fait déjà 552 fichiers à ouvrir, donc oui tu as intérêt à remonter la limite à au moins 2048.
Si tu lance les 12 sauvegardes en même temps ce n'est pas étonnant qu'il y ait saturation… Il faudrait voir ton script complet de sauvegarde. Et peut-être aurait-tu intérêt à utiliser des outils déjà faits comme automysqlbackup (paquet du même nom).

Hors ligne

#8 Le 31/05/2018, à 15:07

ledid33

Re : Mysql LOCK TABLES

mon script

#!/bin/sh
DAY=`date`
 
 

echo
echo "-- Rotate mysql file"
/usr/sbin/logrotate -f /home/sauvegarde/mysql/rotate.conf


echo
echo "-- Mysql Dump de Mysql"
mysqldump -B -Q --all-databases -pmdp -r /home/sauvegarde/mysql/all-database.sql
mysqldump -B -Q base1 -u base1 -pmdp -r /home/sauvegarde/mysql/base1.sql
mysqldump -B -Q base2 -u base2 -pmdp -r /home/sauvegarde/mysql/base2.sql
mysqldump -B -Q base3 -u base3 -pmdp -r /home/sauvegarde/mysql/base3.sql
mysqldump -B -Q base4 -u base4 -pmdp -r /home/sauvegarde/mysql/base4.sql
mysqldump -B -Q base5 -u base5 -pmdp -r /home/sauvegarde/mysql/base5.sql
mysqldump -B -Q base6 -u base6 -pmdp -r /home/sauvegarde/mysql/base6.sql
mysqldump -B -Q base7 -u base7 -pmdp -r /home/sauvegarde/mysql/base7.sql
mysqldump -B -Q base8 -u base8 -pmdp -r /home/sauvegarde/mysql/base8.sql
mysqldump -B -Q base9 -u base9 -pmdp --lock-all-tables -r /home/sauvegarde/mysql/base9.sql
mysqldump -B -Q base10 -u base10 -pmdp -r /home/sauvegarde/mysql/base10.sql

 
cd /home/sauvegarde/mysql
gzip *.sql

echo "-- Restart DB & Httpd"
echo "- $DAY"
/usr/sbin/service apache2 restart
/usr/sbin/service mysql restart


echo
echo "-------------------------------"
echo "- $DAY"
echo "- END"

Dernière modification par ledid33 (Le 31/05/2018, à 15:41)

Hors ligne

#9 Le 31/05/2018, à 15:11

cqfd93

Re : Mysql LOCK TABLES

Modération

Bonjour,

Pour ajouter toi-même les balises code à ton message #8 :

  • Cliquer sur le lien « Modifier » en bas à droite du message

  • Sélectionner le texte

  • Cliquer sur le <> de l'éditeur de message
    1471986854.png


cqfd93

En ligne

#10 Le 31/05/2018, à 15:41

ledid33

Re : Mysql LOCK TABLES

c'est mieux ?
Merci

Hors ligne

#11 Le 31/05/2018, à 15:48

bruno

Re : Mysql LOCK TABLES

Encore une fois je t'encourage à utiliser automysqlbackup plutôt que ton script.

Pourquoi faire une copie de l’ensemble des bases (c'est sans doute cette commande qui bloque et qui nécessiterait --single-transaction) puis des bases 1 à 10 une par une ?

Que se passe-t-il si tu as besoin de récupérer la sauvegarde d'il y a trois jours ?

Pourquoi redémarrer les services apache2 et mysql ?

Dernière modification par bruno (Le 31/05/2018, à 15:48)

Hors ligne

#12 Le 31/05/2018, à 15:59

ledid33

Re : Mysql LOCK TABLES

ok merci je vais regarder automysqlbackup de plus pré
Bonne soirée et merci pour les conseils

Hors ligne

#13 Le 09/07/2018, à 12:22

ledid33

Re : Mysql LOCK TABLES

Bonjour,
J'ai mis un peu de temps à me remettre sur la sauvegarde de ma db. J'ai ce matin installer automysqlbackup et me retrouve encore avec le même message d'erreur

mysqldump: Got error: 1016: Can't open file: './www_enqu............038.frm' (errno: 24 - Too many open files) when using LOCK TABLES

Hors ligne

#14 Le 09/07/2018, à 12:39

ledid33

Re : Mysql LOCK TABLES

Dans mon fichier config j'ai

mis cette commande :

mysqldump  nomdemadb -u utilisateur -pMotdePasse -r /home/Sauvegarde/mysql/www_enqu.....sql

à la place de

#DBNAMES=`mysql --defaults-file=/etc/mysql/debian.cnf --execute="SHOW DATABASES" | awk '{print $1}' | grep -v ^Database$ | grep -v ^mysql$ | grep -v ^performance_schema$ | grep -v ^information_schema$ | tr \\\r\\\n ,\ `


Je n'ai plus mon message d'erreur

Si j'ai bien tout compris :

Automysqlbackup va me sauvegarder tous les jours ma db enqu... qui posait problème

et Crontab
lui va me sauvegarder toutes les autres db

Hors ligne

#15 Le 09/07/2018, à 13:00

bruno

Re : Mysql LOCK TABLES

Tu as remonté la limite et relancé le serveur mysql ?
As-tu vérifié la valeur de open_files_limit ? Comme ceci :

mysql -u root -p

puis dans la console MySQL :

SHOW VARIABLES LIKE 'open%';

Que donne une commande mysqldump sur la base qui pose problème (celle qui contient 552 tables) ? Quel moteur est utilisé par cette base MyISAM ou InnoDB ?

Hors ligne

#16 Le 09/07/2018, à 13:14

ledid33

Re : Mysql LOCK TABLES

salut et merci pour ta réponse,
j'ai tout supprimé (automysqlbackup) puis refais à partir d'une procédure plus simple et mieux expliquée : voir le lien

https://foxinou.fr/mysql-automysqlbacku … s-donnees/

et modifié les valeurs suivantes :

USERNAME : Nom de l’utilisateur MySQL qui aura accès aux bases de données que vous souhaitez sauvegarder. Si il doit tout sauvegarder alors il faut que ce soit un administrateur comme par exemple “root” .
PASSWORD : Indiquez le mot de passe de l’utilisateur.
DBNAMES : Laissez le texte “all” si vous voulez toutes les bases de données ou sinon entrez les noms des bases en les séparant par un espace “DB1 DB2 DB3” .
BACKUPDIR : Dossier dans lequel sera stocker les sauvegardes en plus des mails. Dans notre cas ce sera /home/automysqlbackup/data/ que nous avons créé précédemment.
MAILCONTENT : On définit le paramètre “files” pour recevoir les dumps dans le mail d’information.
MAXATTSIZE : Taille limite d’un mail qui vous sera envoyé pour ma part j’ai mit 20480 ce qui fait 20 Mo.
MAILADDR : Adresse mail ou sera stocké vos dumps et autant dire qu’il faut une boite mail avec pas mal d’espace !

Hors ligne

#17 Le 09/07/2018, à 13:26

bruno

Re : Mysql LOCK TABLES

Une procédure bien expliquée qui commence par ce genre d'ânerie :

sudo su

, je préfère ne pas dire ce que j'en pense…

Dernière modification par bruno (Le 09/07/2018, à 13:27)

Hors ligne