Blog de Thomas Martin

Entries tagged "mysql".

MySQL errno 24 : augmenter le nombre de descripteurs de fichiers
mercredi 02 juin 2010

Si vous obtenez une erreur de ce type, lors d'un mysqldump par exemple :

mysqldump: Got error: 1016: Can't open file: './db/table.frm' (errno: 24) when using LOCK TABLES

C'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 fichier my.cnf, dans la limite permise par votre système d'exploitation :

open_files_limit = 2048

La valeur par défaut étant de 1024.

Tags: evolix, mysql, sysadmin.

 

Gérer plusieurs instances de MySQL
vendredi 19 juin 2009

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 que max_connections pour 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-bin ou --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ètre user = mysql dans
la section [mysqld] du my.cnf, sinon mysqld_multi retourne une erreur :

Ignoring user change to 'mysql-<instance>' because the user was set to 'mysql'
earlier on the command line

Dé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 N

Où 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 -p

Si vous choisissez d'utiliser un mot de passe root commun à 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
Tags: evolix, mysql, sysadmin.

 

Archive

  • 2010
    • janvier (1)
    • juin (3)
  • 2009
    • juin (2)
    • octobre (2)
  • 2008
    • mai (6)
    • juin (1)
    • août (1)
    • octobre (2)
    • novembre (1)

Tags

  • apache (1)
  • blog (2)
  • cisco (1)
  • debian (6)
  • dkim (1)
  • dspam (1)
  • ec2 (1)
  • evolix (15)
  • freebsd (1)
  • ldap (1)
  • mysql (2)
  • oopss (10)
  • openbsd (3)
  • phone (1)
  • php (1)
  • postfix (2)
  • python (1)
  • security (2)
  • sysadmin (11)
  • virtualization (1)
© 2008-2010 Thomas Martin RSS Feed Pour toutes remarques, commentaires, suggestions : blog_deletethis_@_deletethis_tmartin.fr