Main menu:

Site search

Categories

octobre 2009
L M M J V S D
 1234
567891011
12131415161718
19202122232425
262728293031  

Archive

Déplacer les fichiers mysql et apache

Lorsqu’on installe Apache2 et mysql, les fichiers source html (ou php) et les fichiers base de données sont respectivement stockés dans /var/www et /var/lib/mysql. Ce n’est pas, nous en conviendrons, le meilleur endroit. Il vaut mieux que ces fichiers soient stockés à un endroit où un utilisateur du système aurait accès facilement à ceux-ci. Il est aussi recommandé de les mettre sur une partition autre que celle où est installé le système de façon à ce qu’une réinstallation ou une mise à jour puisse se faire sans risque pour ces fichiers. On pourrait imaginer créer une partition séparée pour /var mais /var n’est pas un répertoire auquel les utilisateurs ont accès facilement.
Ce que je fais, moi, c’est créer un utilisateur spécial et je place les fichiers html et les fichiers base de données directement dans le home de cet utilisateur. Si on veille à ce que cet utilisateur fasse partie du groupe mysql et www-data, il aura accès très facilement aux fichiers.

Déplacement des fichiers apache

Nous allons d’abord arrêter le service apache2 le temps de faire les modifications:

$ sudo /etc/init.d/apache2 stop

Maintenant que le service est arrêté, on modifie le fichier de configuration de façon à lui donner le nouveau répertoire où apache doit aller chercher les fichiers à afficher. Le fichier de configuration se trouve dans /etc/apache2/sites-available/. Par défaut, il s’appelle default. Si vous avez un nom de domaine, le fichier sera du style mondomaine.tld. Dans ce fichier, il faut remplacer les /var/www par /home/user/www. Pour éditer le fichier, tapez:

$ sudo nano /etc/apache2/sites-available/default

On copie maintenant les fichiers qui se trouvaient dans /var/www pour les transférer dans /home/user/www:

$ sudo cp -a /var/www /home/user/www/

Et on relance apache2:

$ sudo /etc/init.d/apache2 restart

Déplacement des fichiers mysql

Comme pour apache, on commence par arrêter le service:

$ sudo /etc/init.d/mysql stop

On modifie le fichier de configuration de mysql qui est /etc/mysql/my.cnf et on modifie la ligne qui contient datadir=/var/lib/mysql par datadir=/home/user/mysql:

$ sudo nano /etc/mysql/my.cnf

Ensuite, on copie les fichiers contenant les tables et qui se trouvaient dans /var/lib/mysql dans le nouveau répertoire:

$ sudo cp -a /var/lib/mysql /home/user/mysql

Il faut aussi modifier apparmor qui est un programme permettant de créer des profils de sécurité pour chaque programme. Ubuntu utilise apparmor depuis pas mal de temps et notamment avec mysql. Nous devons donc modifier le fichier /etc/apparmor.d/usr.sbin.mysqld qui contient le profil de mysql et y remplacer /var/lib/mysql par /home/user/mysql:

$ sudo nano /etc/apparmor.d/usr.sbin.mysqld

Il ne reste plus qu’à recharger apparmor pour lui faire prendre en compte les modifications et à relancer mysql:

$ sudo /etc/init.d/apparmor reload
$ sudo /etc/init.d/mysql restart

Vous aurez remarqué que j’utilise nano pour éditer les fichiers de configuration. Je suis parti du principe que mysql et apache2 sont installés sur un serveur ne possédant pas d’interface graphique et donc pas de possibilité d’utiliser gedit et je pense que nano est quand même plus simple d’utilisation que vi par exemple.

Comments

Comment from Fred
Time: 22 octobre 2009, 13 h 54 min

Tuto très bien fait. Juste petite faute de frappe dans le texte « datadir=/var/ib/mysql », mettre « datadir=/var/lib/mysql ».
Dans la commande « sudo nano /etc/apparmor.d/usr.sbin.mysql », il manque le « d » à la fin, « sudo nano /etc/apparmor.d/usr.sbin.mysqld ».
Si MySQL ne se démarre pas à la fin, (erreur parue sous Jaunty, Intrepid ), le problème peut venir de la présence d’un fichier de sauvegarde de « /etc/apparmor.d/usr.sbin.mysqld » créé par Gedit. Pour corriger ce problème, taper : « sudo rm /etc/apparmor.d/usr.sbin.mysqld~ ».

Merci.

Comment from admin
Time: 22 octobre 2009, 17 h 02 min

Oups, c’est exact, il y a deux erreurs de frappe. J’ai corrigé dans le texte.
Merci pour les remarques.

Comment from Max
Time: 12 novembre 2009, 18 h 33 min

Bonjour,
Tout d’abord merci pour ce tuto.
Je suis arrivé sur cette page grâce à un membre du forum d’ubuntu. J’avais comme problème l’impossibilité de relancer mysql. Après la commande « sudo /etc/init.d/mysql start » cela me mettait : « * Starting MySQL database server mysqld [fail] ».
j’ai donc effectué toute les étapes de ce tuto, mais toujours impossible de lancer mysql…
Avez vous une idée ?

Comment from admin
Time: 12 novembre 2009, 21 h 21 min

es-tu sûr de n’avoir pas fait d’erreur en modifiant le fichier /etc/mysql/my.cnf ?

Comment from Max
Time: 13 novembre 2009, 9 h 43 min

Oui je viens de vérifier, j’ai bien changer la ligne datadir=/var/lib/mysql par datadir=/home/mon_pseudo/mysql
J’ai également essayé la solution de Fred “sudo rm /etc/apparmor.d/usr.sbin.mysqld~” mais je n’ai pas ce fichier…

Comment from Pierig
Time: 18 novembre 2009, 12 h 03 min

C’est simple,
c’est claire ,
et c’est l’evidence en terme de configuration.

Comment se fait t il que les donnees soit stockes dans /var/lib par defaut! Pour ne pas devoir forcer la creation d’un utilisateur? une autre raison?

Merci en tout cas !

Comment from admin
Time: 18 novembre 2009, 15 h 24 min

Pierig:
Je crois que c’est par convention que les fichiers sont placés dans /var/lib/.
Dans /var, on met ce qui est variable; les logs par exemple mais aussi les base de données. Si je ne me trompe avec certaines distributions les fichiers sont dans /var/db/.

Comment from Xavier
Time: 16 décembre 2009, 18 h 28 min

Hello,

Merci pour ce tuto 🙂

Max,

Voici le même exemple présenté différemment… peut-être que tu trouveras une réponse… :

Pour changer le dossier où sont stockées les bases (ici exemple dans /tmp/mysql/:
(exemple effectué depuis une installation telle que : yum install mysql-server.i386 sur Redhat 5.2)
su –
service mysqld stop
mkdir /tmp/mysql
chown mysql:mysql /tmp/mysql
mv /var/lib/mysql/* /tmp/mysql/
vi /etc/my.cnf

changer datadir=/var/lib/mysql
en
datadir=/tmp/mysql

(ne pas modifier la ligne avec le socket)

service mysqld start

Comment from Pierig
Time: 17 novembre 2010, 5 h 14 min

Le passage sur Ubuntu 10.10 est il susceptible d’avoir changer quelque chose à cette manipulation?

Je n’en vois pas vraiment la cause, mais quand je l’applique j’obtiens systématiquement l’erreur suivante à la connection à la base:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (111)

Alors que je me connecte sans problème avant le changement. Un droit quelque part?