MySQL : modifier le « datadir »

En installant mon nouveau serveur Gandi, j’ai eu un petit souci en voulant changer le dossier des données de MySQL. Je poste donc ici une petite note en tant qu’aide-mémoire ; ca peut toujours resservir, à moi autant qu’à d’autres ! La procédure est très simple mais peut se solder par un échec et une incompréhension si l’on ne fait pas attention à une petite subtilité.

→ Attention : Avant de vous lancer dans la procédure, veuillez soit passer en mode root (su –) soit penser à placer sudo avant toutes vos commandes si vous faites partie des sudoers.

Première étape : arrêter MySQL

$ /etc/init.d/mysql stop

Deuxième étape : déplacer les fichiers de données à leur nouvel emplacement

$ mkdir /srv/ma_partition/mysql
$ chown -R mysql:mysql /srv/ma_partition/mysql
$ chmod 755 /srv/ma_partition/mysql
$ cp -Rp /var/lib/mysql /srv/ma_partition/

→ Attention : n’oubliez pas de copier avec les arguments R (= recursive) et p (= preserve). Si l’option p n’est pas indiquée (c’est la subtilité), mysql refusera de démarrer en raison des disparités apparues au niveau des droits des fichiers copiés.

Note : par défaut, les fichiers de données sont stockés dans /var/lib/mysql. Il est conseillé de déplacer ces données vers une partition différente de la partition système, d’une part pour ne pas surcharger l’espace disque système et d’autre part pour ne pas s’encombrer à faire des sauvegardes si vous souhaitez réinstaller votre système.

Note bis : l’exemple précédent est pris depuis une configuration sur un serveur Gandi, où l’on dispose de disques de données montés dans le point de montage /srv.

Troisième étape : modifier la configuration

$ nano /etc/mysql/my.cnf

Dans le fichier, modifiez le paramètre datadir (mettez l’ancienne ligne en commentaire au cas où vous deviez revenir à l’ancienne configuration) :

#datadir = /var/lib/mysql
datadir = /srv/ma_partition/mysql

Enregistrez et fermez le fichier.

Dernière étape : redémarrer le serveur

$ /etc/init.d/mysql start

Si vous avez respecté la procédure à la lettre, le serveur devrait redémarrer sans problème. Sinon vous serez gratifié d’un petit message sympathique vous expliquant ce qui ne va pas (qui peut ne pas être forcément limpide…).

N’hésitez pas à utiliser les commentaires pour me corriger si nécessaire.

4 Comments

  1. Steuf:

    Vérifier les droits est essentiel sous Linux surtout au niveau des applications. Perso je compresse un peu plus les commandes lors des déplacement de fichiers d’une API en faisant plutôt ça :

    $ mkdir /srv/ma_partition/mysql
    $ cp -R /var/lib/mysql /srv/ma_partition/mysql
    $ chown -R mysql:mysql /srv/ma_partition/mysql

    J’ai supprimé le chmod 755 sur le répertoire, il me semble que ce n’est pas nécessaire. Le résultat est identique, mais personnellement moins j’ai de lignes de commandes à taper, mieux je me porte 🙂

  2. Shynoe:

    Bonjour, il semblerait qu’il y ai une erreur, lorsqu’on exécute la commande
    cp -Rp /var/lib/mysql /srv/ma_partition/mysql

    On obtient plus la même arborescence dans le dossier mysql. En effet les bases de donnée d’origine se trouve dans le dossier : /var/lib/mysql/mysql/

    En faisant la commande ci dessus on obtient l’arborescence suivante : /srv/ma_partition/mysql/mysql/mysql

    Il faudrai exécuter seulement cp -Rp /var/lib/mysql /srv/ma_partition/
    pour obtenir la même arborescence.

    J’ai du mal à m’expliquer, mais j’espère que vous l’aurez compris.

    Je fais comme cela et maintenant mon mysql se lance correctement.

  3. SamRay1024:

    Exact, merci pour ce rectificatif. Un malheureux copier-coller… Je corrige ça immédiatement.

  4. ben:

    Salut,
    Shynoe a raison, attention à l’arborescence. Sinon parfait, ça marche du 1er coup, merci pour ce tuto.

Leave a comment

Merci d'utiliser le forum pour toute demande de support relatif aux ressources proposées sur ce site.