Pages : 1
#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).
#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.
#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).
#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
#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)
#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 ?
#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)
Pages : 1