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
Blog de Thomas Martin
Entries from juin 2009.
DSPAM est un logiciel anti-spam pouvant aisément être utilisé comme agent
de livraison Postfix. Cela évite d'utiliser certains hacks, comme la
réinjection SMTP. Dans ce mode, DSPAM agit comme un relais qui accepte un mail
sur son entrée standard, le traite en fonction de votre configuration (ajout
d'en-têtes, préfixage de [SPAM] au sujet, etc), et le délivre à un agent de
livraison final (directiveTrustedDeliveryAgentdansdspam.conf).Pour cela il suffit d'ajouter une ligne de ce type à votre
master.cf:dspam unix - n n - 1 pipe flags=DORqhu user=dspam:mail argv=/usr/local/bin/dspam-wrapper --user ${recipient} --deliver=innocent,spamEt de positionner ensuite une directive
virtual_transport = dspam, dans le
cas de l'utilisation de comptes virtuels. Il est aussi possible de l'activer
seulement pour certains utilisateurs à l'aide de la tabletransport(5).Toutefois, pour que cela reste fiable, il est nécessaire que DSPAM retourne un
code d'erreur 75 (tempfail) en cas de soucis, afin que Postfix conserve
celui-ci en file d'attente. Sur ce point, la version courante de DSPAM (3.8.0)
souffre d'un bug génant : si l'agent de livraison final retourne un code
d'erreur, DSPAM ne retournera pas ce même code (contrairement à ce qui est
indiqué dans la sectionEXIT VALUEde la page de man), mais 255. Ce qui
entraîne une perte pure et simple du mail !En attendant, pour contourner ce problème, il est possible de mettre en place
un wrapper qui retournera le code 75 dans toutes les situations d'erreur.Exemple d'un fichier
dspam-wrapper:#!/bin/sh cat | /usr/local/bin/dspam $* || return 75
Archive
- 2010
- 2009
- 2008