Si vous obtenez une erreur de ce type, lors d'un
mysqldumppar exemple :mysqldump: Got error: 1016: Can't open file: './db/table.frm' (errno: 24) when using LOCK TABLESC'est que votre serveur MySQL tente d'ouvrir trop de fichiers simultanément.
Pour augmenter le nombre maximal de fichiers pouvant être ouverts, vous pouvez ajuster le paramètre suivant dans la section
[mysqld]du fichiermy.cnf, dans la limite permise par votre système d'exploitation :open_files_limit = 2048La valeur par défaut étant de 1024.
Blog de Thomas Martin
Entries tagged "mysql".
Voici un résumé de la mise en oeuvre de multiples instances MySQL sur un
serveur Debian, à l'aide de l'outil mysqld_multi. Cette solution permet par
exemple d'offrir un accès complet à MySQL dans le cadre d'un hébergement
mutualisé (l'utilisateur peut alors créer ses propres bases, gèrer ses
utilisateurs, etc). Cela peut être aussi utilisé pour cloisonner totalement les
bases de données de différentes applications, et ainsi d'ajuster finement des
paramètres tels quemax_connectionspour chacune d'elles.Voici les étapes :
- Ajouter une ou plusieurs sections
[mysqldN]dans/etc/mysql/my.cnf, où N
correspond au numéro d'instance, et<instance>à son nom.[mysqldN] user = mysql-<instance> port = 3307 socket = /var/run/mysqld-<instance>/mysqld.sock pid-file = /var/run/mysqld-<instance>/mysqld.pid datadir = /home/mysql/<instance>Si vous utilisez les options
--log,--log-binou--log-error, il est
nécessaire de les redéfinir dans chaque configuration d'instances (voir
Running Multiple MySQL Servers on the Same Machine).Note : pour faire tourner l'instance avec un utilisateur différent (comme dans
cette exemple) il est à priori nécessaire de commenter le paramètreuser = mysqldans
la section[mysqld]dumy.cnf, sinonmysqld_multiretourne une erreur :Ignoring user change to 'mysql-<instance>' because the user was set to 'mysql' earlier on the command lineDécommenter ce paramètre ne gène pas le lancement de l'instance initiale.
- Créer le compte système qui fera tourner l'instance.
useradd -r mysql-<instance>
- Créer le répertoire de données de l'instance, et les répertoires annexes.
mysql_install_db --datadir=/home/mysql/<instance> chown -R mysql-<instance> /home/mysql/<instance> mkdir /var/run/mysqld-<instance> chown mysql-<instance> /var/run/mysqld-<instance>
- Démarrage de l'instance
mysqld_multi --verbose --no-log start NOù N fait référence au numéro de l'instance.
Il est maintenant possible de s'y connecter en utilisant le numéro de port
TCP/IP spécifié plus haut, et en saisissant un mot de passe vide :mysql -h 127.0.0.1 --port=3307 -u root -pSi vous choisissez d'utiliser un mot de passe
rootcommun à toutes vos
instances, vous trouverez pratique d'ajouter la section suivante à votre
fichier.my.cnf:[mysqld_multi] user = root password = "<password>"Enfin, voici un exemple de script d'init permettant de démarrer et d'arrêter
proprement toutes vos instances :#!/bin/sh case "$1" in start) mysqld_multi start ;; stop) mysqld_multi stop ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
Archive
- 2010
- 2009
- 2008