La Case de l’Oncle Tom

Développement Web, bonnes pratiques et performances

Modifier l’emplacement des données d’un serveur MySQL

Logo MySQL

L’installation par défaut d’un serveur MySQL est suffisante pour être opérationnel dans la minute qui suit. Elle ne facilite en revanche pas la maintenance en laissant le répertoire contenant vos bases de données et tables hors de portée.

L’intérêt de choisir soi-même l’emplacement de ce répertoire, le datadir, est double :

  • regrouper les données en un endroit connu (facilite les sauvegardes)
  • utiliser le partitionnement du disque pour ne pas avoir à craindre une perte de données en cas de réinstallation du système (facilite la maintenance)

Nous allons voir comment procéder à ce changement tout en adaptant les sécurités des systèmes tels que SELinux et AppArmor. Ces derniers empêcheront en effet le serveur de démarrer.

Remarque importante : j’ai publié une version améliorée du déplacement des données d’un serveur MySQL. Je la recommande par rapport à cet article : elle implique moins de manipulations et est plus propre.

Quelques généralités avant de commencer

Quitte à changer l’emplacement du datadir, autant le déplacer sur une partition qui ne sera pas effacé lors de la réinstallation de votre système d’exploitation, que ça soit du Linux, MacOS ou Windows.

Personnellement, sous Ubuntu/Debian, je crée un répertoire dans /home qui s’appelle mysql. Mon répertoire /home est bien entendu monté sur une partition différente. Si ce n’est pas le cas chez vous, pensez à déplacer votre /home.

sudo mkdir /home/mysql
sudo chown mysql:mysql /home/mysql

Enfin, dernier détail à connaître : l’emplacement de vos données MySQL :

  • sous Linux, généralement : /var/lib/mysql
  • sous Windows, avec WAMP : C:Program FilesWampmysqldata

Méthode 1 : modifier la configuration MySQL

C’est probablement la méthode la plus simple mais elle a l’inconvénient d’avoir à modifier un fichier de configuration. Il faut donc modifier la propriété datadir de votre fichier de configuration MySQL :

  • sous Linux, généralement : /etc/mysql/my.cnf
  • sous Windows, avec WAMP : C:Program FilesWampmysqlconfmy.ini

Dans ce fichier se trouve une section consacrée à la configuration générale du serveur mysql (mysqld pour mysql daemon) :

[mysqld]
user            = mysql
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp

J’ai mis en gras la ligne qui nous intéresse, à savoir le datadir.
Quelle valeur mettre ? Celle de l’emplacement souhaité pour vos données. Dans mon cas ça aurait été /home/mysql :

datadir         = /home/mysql

Vous vous assurerez d’avoir bien stoppé le service MySQL, d’avoir copié/collé vos données de l’ancien emplacement vers le nouveau et enfin de redémarrer MySQL. C’est seulement en cas de réussite que vous pourrez supprimer l’ancien répertoire ;-)

sudo -s
/etc/init.d/mysql stop
cp -pr /var/lib/mysql/* /home/mysql
/etc/init.d/mysql start

Méthode 2 : utilisation d’un lien symbolique

La documentation de MySQL explique l’utilisation des liens symboliques pour tout, une base de données précises voire même les tables. Ceci dit nous allons voir l’exemple global : on déplace tout.

Concrètement cette méthode consiste à :

  1. stopper le service MySQL
  2. déplacer le répertoire de données (au cas où)
  3. créer le lien symbolique
  4. copier les données dans le nouvel emplacement
  5. relancer le service MySQL

Concrètement, ça se traduit comme ceci :

sudo -s
mv /var/lib/mysql /var/lib/mysql-old
ln -s /home/mysql /var/lib/mysql
cp -pr /var/lib/mysql-old/* /home/mysql
/etc/init.d/mysqld start

Là encore, supprimez la copie de vos données (répertoire mysql-old) seulement en cas de succès. Ça facilite les retours en arrière en cas de pépin.

Cas particulier : systèmes employant AppArmor ou SELinux

Il y a cependant un hic possible si vous utilisez une distribution Fedora ou Ubuntu, surtout depuis sa version Hardy Heron (8.04). Celle-ci intègre une sécurité pour éviter à certains services critiques d’être altérés par une manipulation extérieure … comme la notre.

Il faut savoir que les 2 méthodes du haut échoueront si vous rentrez dans ce cas de figure : le service MySQL ne démarre pas.
Pas de panique, il y a juste un fichier à modifier : /etc/apparmor.d/usr.sbin.mysqld. Il y a un passage ressemblant à ceci, dans le cas d’AppArmor et Ubuntu :

/etc/mysql/*.pem r,
/etc/mysql/conf.d/ r,
/etc/mysql/conf.d/* r,
/etc/mysql/my.cnf r,
/usr/sbin/mysqld mr,
/usr/share/mysql/** r,
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid w,
/var/run/mysqld/mysqld.sock w,

Vous voyez le loup venir. Il suffit de remplacer les occurences de /var/lib/mysql par le chemin de votre nouvel emplacement, /home/mysql dans notre cas :

/home/mysql/ r,
/home/mysql/** rwk,

La raison de cette modification est presque simple : AppArmor ne suit pas les liens symboliques. Il considère que /var/lib/mysql est différent de /home/mysql et que ce dernier ne concerne pas le service mysqld.
Notre modification évite ce blocage et permet du même coup au serveur MySQL de démarrer ; les échecs étant dus au fait que le serveur ne trouvait pas de base à charger (dont la sienne, mysql).

Pour terminer, on peut relancer les 2 services, apparmor et mysqld :

sudo /etc/init.d/apparmor restart
sudo /etc/init.d/mysqld restart

Conclusion

Nous avons vu 2 méthodes pour rendre sa gestion des bases de données plus souple et plus sure. En cas de défaillance système – ça arrive même aux meilleurs – il faut pouvoir le réinstaller sans craindre de perdre des données vitales. Et les bases de données le sont.

On peut aussi constater que les nouveaux services de protection peuvent compliquer la vie si on ne les sait pas actifs et si on ne comprend pas leur fonctionnement. J’ai passé plusieurs heures à comprendre pourquoi le serveur MySQL ne se relançait pas alors qu’il me semblait avoir effectué la même manipulation sur les précédentes versions d’Ubuntu.

N’hésitez pas à partager votre méthode ou apporter vos suggestions sur votre gestion des datadir.

Votre version d'Adobe Flash Player n'est pas suffisamment à jour pour afficher cette animation.

Votre lecture de l'article Modifier l’emplacement des données d’un serveur MySQL est terminée. Il y a encore plein de choses à lire ici ... vous voulez des idées ?

Commentaires & rétroliens

  1. Sprank dit :

    Je crois bien qu’il manque un « ne » entre « MySQL » et « démarre » dans la phrase : « Il faut savoir que les 2 méthodes du haut échoueront si vous rentrez dans ce cas de figure : le service MySQL démarre pas. »

  2. Oncle Tom dit :

    Merci Sprank c’est corrigé ;)

  3. Daniel dit :

    Merci bcp, j’ai été confronté au pb et j’avais abandonné. (merci aussi à Simon Gaudillet de la ml ubuntu-fr qui m’a donné le lien vers ce billet, car mes recherche à partir du message d’erreur de mysql ne menaient que vers des pbs de droits)

  4. Oncle Tom dit :

    Tant mieux si ça sert ;-) j’avais posté le lien sur le forum Ubuntu-fr justement. À en voir l’affluence que ça provoque, on ne devait pas être les seuls concernés !

  5. Daniel dit :

    A la décharge des mainteneurs du paquet (et de la MOTU en général), le fichier my.cnf comporte bien l’avertissement suivant :

    # * IMPORTANT
    # If you make changes to these settings and your system uses apparmor, you
    may
    # also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.

    comme me l’a gentiment rappellé Bruno Patri (ml ubuntu-fr aussi)…

    Bref, quand on a un pb après modif d’un fichier de conf, même si on le connait bien, toujours lire les COMMENTAIRES et les README ! ;-)

  6. Matt dit :

    Un gros merci aussi pour ce tuto qui m’a sauvé la vie :)
    Il mérite largememt sa page dans la doc ubuntu-fr.
    Bonne continuation

  7. Jay dit :

    Bonjour, bien ce tuto. Connais-tu la syntaxe pour rediriger uniquement la base de données mysql sur un autre serveur dédié bdd ?

  8. Oncle Tom dit :

    Hm, pas sûr de comprendre pourquoi tu veux la mettre ailleurs : elle contient toutes les informations utilisées par MySQL pour fonctionner. Si tu la mets ailleurs, le serveur est ailleurs.

    Regarde soit du côté du clustering, soit du montage réseau. À moins que quelqu’un d’autre n’ait en tête une meilleure solution ?

  9. Daniel dit :

    @Jay Je comprends que tu souhaite installer ta Base de données mysql sur un serveur B (et t’y connecter depuis ton poste A). C’est une conf classique que tu trouveras un peu partout. En gros, dire à B qu’il doit écouter sur une autre IP que 127.0.0.1 (bind-adress dans my.cnf) et à A qu’il doit interroger B pour ses requêtes (dans tes scripts de connexion, mettre B au lieu de localhost).

    Si tu parles de mettres les fichiers de bdd mysql sur un lecteur réseau, c’est TRÈS déconseillé (et n’a pas grand intérêt car tu ne peux pas les partager entre plusieurs serveurs mysql), c’est un bon moyen de se retrouver avec des bases corrompues (en dehors de la question des perfs).

    Si ce n’est pas ça que tu veux faire, dsl, j’ai mal compris…

  10. sparfait dit :

    Bonjour,
    J’ai modifié mes fichiers comme spécifié mais mon serveur mysql refuse de démarer j’ai le message suivant :
    « sudo /etc/init.d/mysql start
    * Starting MySQL database server mysqld [fail]
     »
    Et là je n’ai plus le choix je n’ai plus de place sur ma partition contenant mon /var/lib/mysql … Est ce que quelqu’un pourrait m’aider ?

  11. Oncle Tom dit :

    Où se trouvent tes données mysql (vu que tu sembles l’avoir déplacé de /var/lib/mysql) ? Il faut dans ce cas :

    1. modifier l’emplacement datadir dans le my.cnf
    2. reporter ce nouvel emplacement dans le fichier de configuration d’apparmor pour MySQL
  12. Jay dit :

    Oui tu as vu juste Daniel, c bien cela…
    Site web en utilisant 2 serveurs sous DEBIAN :
    A en « front » MySQL client, B en « BDD » MySQL server…
    Sais-tu précisement quels scripts de connexion dois-je modifier en A ?

  13. Oncle Tom dit :

    Dans ce cas c’est de la réplication MySQL que tu veux faire ;) y’a 1 fichier à modifier et éventuellement les données à synchroniser.

  14. Jay dit :

    Merci Oncle TOM pour cette suggestion mais le but n’est pas de faire une réplication ou backup… La configuration est différente sur chaque serveur… Par ex., j’installe APACHE2 et MySQL client sur le 1er et sur le second, j’installe MySQL server sans APACHE2… Mais j’ai du mal à trouver des infos précises sur ce type de configuration apparament très utilisée en entreprise. Si tu as des sources, elles sont les bienvenues :-)

  15. Oncle Tom dit :

    Ah ben écoute de ce que tu en dis tu veux faire une réplication … ou alors tu veux te connecter à B depuis A.

    Si c’est ce dernier cas, il faut

    1. ouvrir l’écoute réseau sur le serveur B (dans my.cnf, y’a une partie commentée à ce sujet)
    2. établir une connexion MySQL sur l’IP du serveur B et non `localhost`
    3. verrouiller l’écoute sur le serveur B pour n’autoriser que les connexions locales (locahost) ou provenant de A (pour éviter les attaques extérieures)

    Si c’est pas ça j’ai rien compris ;-)

  16. Daniel dit :

    @Jay, les scripts que tu dois modifier sont tous ceux (php, ruby, perl, python, java, etc.) qui se connectent à mysql via « localhost » ou « 127.0.0.1″ (ou le nom du host sur lequel ils sont). Tu dois mettre à la place le nom ou l’IP de B.

    En général, pour chaque appli web, tu as un fichier de param où tu indique host, login, pass, tu dois donc changer le host pour chaque appli.

  17. sparfait dit :

    Bonjour,
    Suite de mon message de mercredi 14 mai :
    J’ai copié le répertoire /var/lib/mysql
    dans un répertoire qui se trouve sur un disque monter sur /media/MYSQL (FAT 32) sur lequel j’ai créé un répertoire « LINUX ». Mes data se retrouvent donc dans le chemin suivant /media/MYSQL/LINUX/mysql
    J’ai donc modifié mon fychier my.cnf ainsi :
    user = mysql
    pid-file = /var/run/mysqld/mysqld.pid
    socket = /var/run/mysqld/mysqld.sock
    port = 3306
    basedir = /usr
    datadir=/media/MYSQL/LINUX/mysql
    tmpdir = /tmp
    language = /usr/share/mysql/french

    et mon fichier usr.sbin.mysqld ainsi :
    # vim:syntax=apparmor
    # Last Modified: Tue Jun 19 17:37:30 2007
    #include

    /usr/sbin/mysqld {
    #include
    #include
    #include
    #include

    capability dac_override,
    capability setgid,
    capability setuid,

    /etc/hosts.allow r,
    /etc/hosts.deny r,

    /etc/group m,
    /etc/passwd m,

    /etc/mysql/*.pem r,
    /etc/mysql/conf.d/ r,
    /etc/mysql/conf.d/* r,
    /etc/mysql/my.cnf r,
    /usr/sbin/mysqld mr,
    /usr/share/mysql/** r,
    /media/MYSQL/LINUX/mysql/ r,
    /media/MYSQL/LINUX/mysql/** rwk,
    /var/log/mysql/ r,
    /var/log/mysql/* rw,
    /var/run/mysqld/mysqld.pid w,
    /var/run/mysqld/mysqld.sock w,
    }

    je redemarre apparmor par sudo /etc/init.d/apparmor restart ==> OK
    Je démarre MySQL par sudo /etc/init.d/mysql start ==> Starting MySQL database server mysqld [fail]
    J’ai fait la meme manip en placant le répertoire /var/lib/mysql dans mon répertoire home ==> même problème …

    Merci pour tout aide !!

  18. stadrum dit :

    Bonjour et merci pour ce tuto qui m’a beaucoup aidé.
    J’avais commencé la manip’ de bouger mon dossier mysql en suivant le tuto de LAMP de doc.ubuntu-fr.org et ça m’a tout mis en l’air.
    Du coup, ce serait chouette d’intégrer cette page au site d’Ubuntu, voir même en lieu et place du tuto qui m’a fait « plus de peur que de mal »…

  19. Oncle Tom dit :

    @stadrum : la documentation a été mise à jour visiblement avec un lien vers le sujet que j’avais créé ;) ce n’était qu’une question de temps !

  20. Jay dit :

    Ok çà fonctionne, merci de votre aide :)

  21. sparfait dit :

    Ok ca fonctionne aussi pour moi : Je n’avais pas mis les bonnes options pour monter mon disque où je voulais mettre mon répertoire avec les données.
    Merci.

  22. michelw dit :

    Je vous sollicite car je viens d’essayer de faire cette manipulation par deux fios en réinstallant le système entre les deux, mais cela ne fonctionne pas. Ci-joint la copie de mon éditeur:

    michel@1:~$ sudo mkdir /home/michel/mysql
    [sudo] password for michel:
    michel@1:~$ sudo chown mysql:mysql /home/michel/mysql
    michel@1:~$ sudo /etc/init.d/mysql stop
     * Stopping MySQL database server mysqld                                 [ OK ]
    michel@1:~$ sudo mv -v /var/lib/mysql /home/michel/mysql
    `/var/lib/mysql' -> `/home/michel/mysql/mysql'
    `/var/lib/mysql/ibdata1' -> `/home/michel/mysql/mysql/ibdata1'
    `/var/lib/mysql/mysql_upgrade_info' -> `/home/michel/mysql/mysql/mysql_upgrade_info'
    `/var/lib/mysql/mysql' -> `/home/michel/mysql/mysql/mysql'
    `/var/lib/mysql/mysql/help_category.frm' -> `/home/michel/mysql/mysql/mysql/help_category.frm'
    `/var/lib/mysql/mysql/tables_priv.MYD' -> `/home/michel/mysql/mysql/mysql/tables_priv.MYD'
    `/var/lib/mysql/mysql/help_keyword.MYI' -> `/home/michel/mysql/mysql/mysql/help_keyword.MYI'
    `/var/lib/mysql/mysql/help_topic.MYI' -> `/home/michel/mysql/mysql/mysql/help_topic.MYI'
    `/var/lib/mysql/mysql/procs_priv.MYD' -> `/home/michel/mysql/mysql/mysql/procs_priv.MYD'
    `/var/lib/mysql/mysql/user.MYD' -> `/home/michel/mysql/mysql/mysql/user.MYD'
    `/var/lib/mysql/mysql/time_zone_transition_type.MYD' -> `/home/michel/mysql/mysql/mysql/time_zone_transition_type.MYD'
    `/var/lib/mysql/mysql/host.MYD' -> `/home/michel/mysql/mysql/mysql/host.MYD'
    `/var/lib/mysql/mysql/time_zone_leap_second.MYI' -> `/home/michel/mysql/mysql/mysql/time_zone_leap_second.MYI'
    `/var/lib/mysql/mysql/user.frm' -> `/home/michel/mysql/mysql/mysql/user.frm'
    `/var/lib/mysql/mysql/time_zone_leap_second.frm' -> `/home/michel/mysql/mysql/mysql/time_zone_leap_second.frm'
    `/var/lib/mysql/mysql/columns_priv.MYD' -> `/home/michel/mysql/mysql/mysql/columns_priv.MYD'
    `/var/lib/mysql/mysql/user.MYI' -> `/home/michel/mysql/mysql/mysql/user.MYI'
    `/var/lib/mysql/mysql/procs_priv.frm' -> `/home/michel/mysql/mysql/mysql/procs_priv.frm'
    `/var/lib/mysql/mysql/help_category.MYD' -> `/home/michel/mysql/mysql/mysql/help_category.MYD'
    `/var/lib/mysql/mysql/time_zone_transition.MYI' -> `/home/michel/mysql/mysql/mysql/time_zone_transition.MYI'
    `/var/lib/mysql/mysql/func.MYD' -> `/home/michel/mysql/mysql/mysql/func.MYD'
    `/var/lib/mysql/mysql/procs_priv.MYI' -> `/home/michel/mysql/mysql/mysql/procs_priv.MYI'
    `/var/lib/mysql/mysql/columns_priv.MYI' -> `/home/michel/mysql/mysql/mysql/columns_priv.MYI'
    `/var/lib/mysql/mysql/help_relation.frm' -> `/home/michel/mysql/mysql/mysql/help_relation.frm'
    `/var/lib/mysql/mysql/db.MYD' -> `/home/michel/mysql/mysql/mysql/db.MYD'
    `/var/lib/mysql/mysql/proc.MYD' -> `/home/michel/mysql/mysql/mysql/proc.MYD'
    `/var/lib/mysql/mysql/help_topic.frm' -> `/home/michel/mysql/mysql/mysql/help_topic.frm'
    `/var/lib/mysql/mysql/func.MYI' -> `/home/michel/mysql/mysql/mysql/func.MYI'
    `/var/lib/mysql/mysql/time_zone_name.frm' -> `/home/michel/mysql/mysql/mysql/time_zone_name.frm'
    `/var/lib/mysql/mysql/proc.MYI' -> `/home/michel/mysql/mysql/mysql/proc.MYI'
    `/var/lib/mysql/mysql/func.frm' -> `/home/michel/mysql/mysql/mysql/func.frm'
    `/var/lib/mysql/mysql/proc.frm' -> `/home/michel/mysql/mysql/mysql/proc.frm'
    `/var/lib/mysql/mysql/time_zone_name.MYI' -> `/home/michel/mysql/mysql/mysql/time_zone_name.MYI'
    `/var/lib/mysql/mysql/db.MYI' -> `/home/michel/mysql/mysql/mysql/db.MYI'
    `/var/lib/mysql/mysql/db.frm' -> `/home/michel/mysql/mysql/mysql/db.frm'
    `/var/lib/mysql/mysql/help_keyword.frm' -> `/home/michel/mysql/mysql/mysql/help_keyword.frm'
    `/var/lib/mysql/mysql/time_zone.MYD' -> `/home/michel/mysql/mysql/mysql/time_zone.MYD'
    `/var/lib/mysql/mysql/host.frm' -> `/home/michel/mysql/mysql/mysql/host.frm'
    `/var/lib/mysql/mysql/host.MYI' -> `/home/michel/mysql/mysql/mysql/host.MYI'
    `/var/lib/mysql/mysql/time_zone.frm' -> `/home/michel/mysql/mysql/mysql/time_zone.frm'
    `/var/lib/mysql/mysql/help_keyword.MYD' -> `/home/michel/mysql/mysql/mysql/help_keyword.MYD'
    `/var/lib/mysql/mysql/time_zone_transition_type.MYI' -> `/home/michel/mysql/mysql/mysql/time_zone_transition_type.MYI'
    `/var/lib/mysql/mysql/help_category.MYI' -> `/home/michel/mysql/mysql/mysql/help_category.MYI'
    `/var/lib/mysql/mysql/time_zone_name.MYD' -> `/home/michel/mysql/mysql/mysql/time_zone_name.MYD'
    `/var/lib/mysql/mysql/tables_priv.MYI' -> `/home/michel/mysql/mysql/mysql/tables_priv.MYI'
    `/var/lib/mysql/mysql/columns_priv.frm' -> `/home/michel/mysql/mysql/mysql/columns_priv.frm'
    `/var/lib/mysql/mysql/time_zone_transition.frm' -> `/home/michel/mysql/mysql/mysql/time_zone_transition.frm'
    `/var/lib/mysql/mysql/help_relation.MYD' -> `/home/michel/mysql/mysql/mysql/help_relation.MYD'
    `/var/lib/mysql/mysql/time_zone_transition_type.frm' -> `/home/michel/mysql/mysql/mysql/time_zone_transition_type.frm'
    `/var/lib/mysql/mysql/tables_priv.frm' -> `/home/michel/mysql/mysql/mysql/tables_priv.frm'
    `/var/lib/mysql/mysql/time_zone_transition.MYD' -> `/home/michel/mysql/mysql/mysql/time_zone_transition.MYD'
    `/var/lib/mysql/mysql/help_relation.MYI' -> `/home/michel/mysql/mysql/mysql/help_relation.MYI'
    `/var/lib/mysql/mysql/time_zone_leap_second.MYD' -> `/home/michel/mysql/mysql/mysql/time_zone_leap_second.MYD'
    `/var/lib/mysql/mysql/help_topic.MYD' -> `/home/michel/mysql/mysql/mysql/help_topic.MYD'
    `/var/lib/mysql/mysql/time_zone.MYI' -> `/home/michel/mysql/mysql/mysql/time_zone.MYI'
    `/var/lib/mysql/debian-5.0.flag' -> `/home/michel/mysql/mysql/debian-5.0.flag'
    `/var/lib/mysql/ib_logfile1' -> `/home/michel/mysql/mysql/ib_logfile1'
    `/var/lib/mysql/ib_logfile0' -> `/home/michel/mysql/mysql/ib_logfile0'
    détruit `/var/lib/mysql/ibdata1'
    détruit `/var/lib/mysql/mysql_upgrade_info'
    détruit `/var/lib/mysql/mysql/help_category.frm'
    détruit `/var/lib/mysql/mysql/tables_priv.MYD'
    détruit `/var/lib/mysql/mysql/help_keyword.MYI'
    détruit `/var/lib/mysql/mysql/help_topic.MYI'
    détruit `/var/lib/mysql/mysql/procs_priv.MYD'
    détruit `/var/lib/mysql/mysql/user.MYD'
    détruit `/var/lib/mysql/mysql/time_zone_transition_type.MYD'
    détruit `/var/lib/mysql/mysql/host.MYD'
    détruit `/var/lib/mysql/mysql/time_zone_leap_second.MYI'
    détruit `/var/lib/mysql/mysql/user.frm'
    détruit `/var/lib/mysql/mysql/time_zone_leap_second.frm'
    détruit `/var/lib/mysql/mysql/columns_priv.MYD'
    détruit `/var/lib/mysql/mysql/user.MYI'
    détruit `/var/lib/mysql/mysql/procs_priv.frm'
    détruit `/var/lib/mysql/mysql/help_category.MYD'
    détruit `/var/lib/mysql/mysql/time_zone_transition.MYI'
    détruit `/var/lib/mysql/mysql/func.MYD'
    détruit `/var/lib/mysql/mysql/procs_priv.MYI'
    détruit `/var/lib/mysql/mysql/columns_priv.MYI'
    détruit `/var/lib/mysql/mysql/help_relation.frm'
    détruit `/var/lib/mysql/mysql/db.MYD'
    détruit `/var/lib/mysql/mysql/proc.MYD'
    détruit `/var/lib/mysql/mysql/help_topic.frm'
    détruit `/var/lib/mysql/mysql/func.MYI'
    détruit `/var/lib/mysql/mysql/time_zone_name.frm'
    détruit `/var/lib/mysql/mysql/proc.MYI'
    détruit `/var/lib/mysql/mysql/func.frm'
    détruit `/var/lib/mysql/mysql/proc.frm'
    détruit `/var/lib/mysql/mysql/time_zone_name.MYI'
    détruit `/var/lib/mysql/mysql/db.MYI'
    détruit `/var/lib/mysql/mysql/db.frm'
    détruit `/var/lib/mysql/mysql/help_keyword.frm'
    détruit `/var/lib/mysql/mysql/time_zone.MYD'
    détruit `/var/lib/mysql/mysql/host.frm'
    détruit `/var/lib/mysql/mysql/host.MYI'
    détruit `/var/lib/mysql/mysql/time_zone.frm'
    détruit `/var/lib/mysql/mysql/help_keyword.MYD'
    détruit `/var/lib/mysql/mysql/time_zone_transition_type.MYI'
    détruit `/var/lib/mysql/mysql/help_category.MYI'
    détruit `/var/lib/mysql/mysql/time_zone_name.MYD'
    détruit `/var/lib/mysql/mysql/tables_priv.MYI'
    détruit `/var/lib/mysql/mysql/columns_priv.frm'
    détruit `/var/lib/mysql/mysql/time_zone_transition.frm'
    détruit `/var/lib/mysql/mysql/help_relation.MYD'
    détruit `/var/lib/mysql/mysql/time_zone_transition_type.frm'
    détruit `/var/lib/mysql/mysql/tables_priv.frm'
    détruit `/var/lib/mysql/mysql/time_zone_transition.MYD'
    détruit `/var/lib/mysql/mysql/help_relation.MYI'
    détruit `/var/lib/mysql/mysql/time_zone_leap_second.MYD'
    détruit `/var/lib/mysql/mysql/help_topic.MYD'
    détruit `/var/lib/mysql/mysql/time_zone.MYI'
    détruire le répertoire: `/var/lib/mysql/mysql'
    détruit `/var/lib/mysql/debian-5.0.flag'
    détruit `/var/lib/mysql/ib_logfile1'
    détruit `/var/lib/mysql/ib_logfile0'
    détruire le répertoire: `/var/lib/mysql'
    michel@1:~$ sudo ln -s /home/michel/mysql /var/lib/mysql
    michel@1:~$ sudo gedit /etc/apparamor.d/usr.sbin.mysqld
    michel@1:~$  sudo gedit /etc/apparamor.d/usr.sbin.mysql
    michel@1:~$ sudo gedit /etc/apparmor.d/usr.sbin.mysqld
    michel@1:~$ sudo /etc/init.d/mysql restart
     * Stopping MySQL database server mysqld                                 [ OK ]
     * Starting MySQL database server mysqld                                 [fail]

    Je vous joints également la copie de mon fichier modifié: usr.sbin.mysqld

      /etc/mysql/*.pem r,
      /etc/mysql/conf.d/ r,
      /etc/mysql/conf.d/* r,
      /etc/mysql/my.cnf r,
      /usr/sbin/mysqld mr,
      /usr/share/mysql/** r,
      /home/michel/mysql/ r,
      /home/michel/mysql/** rwk,
      /var/log/mysql/ r,
      /var/log/mysql/* rw,
      /var/run/mysqld/mysqld.pid w,
      /var/run/mysqld/mysqld.sock w,

    Pourriez vous m’aider? En vous remerciant
    Michel

  23. bob dit :

    Merci beaucoup, l’astuce m’a evité les mauvaises pistes

  24. [...] sur le déplacement du datadir de Mysql Partager [...]

  25. Djyp dit :

    J’ai trouvé la solution, ayant le même problème que d’autre qui ont fait la manip exacte !
    Après quelques recherches j’ai trouvé http://dev.mysql.com/doc/refman/5.0/en/moving.html dont un commentaire fait chown -R mysql:adm sur le nouveau dossier ! now ça fonctione !

  26. Oncle Tom dit :

    Curieux car je mentionne cette histoire de chown. En début d’article.

    Je suis en train de travailler sur une méthode alternative encore plus propre. Je ne manquerai pas de la partager ;-)

  27. Hugout dit :

    Merci beaucoup. Votre publication m’a permis de résoudre mon problème suite au passage de ubuntu 8.4 à 8.10.
    Je vous ai cité dans le forum ubuntu
    http://forum.ubuntu-fr.org/viewtopic.php?id=267143

  28. oncletom dit :

    J'ai eu le même problème. J'ai cherché à créer un profil apparmor pour MySQL qui étendrait les valeurs par défaut mais sans succès. Le but étant de ne pas modifier le fichier de conf' initial. Tu aurais des idées ?

  29. ratm dit :

    Merci beaucoup.
    Juste une remarque importante. J'ai commis l'erreur de copier le fichier usr.sbin.mysqld sous le nom usr.sbin.mysqld_original dans le même répertoire et le fichier original était toujours interpreté et bloquait le lancement de mysql. Donc pas de backup de ces fichiers sous /etc/apparmor.d/

  30. [...] déjà expliqué comment modifier l’emplacement des données d’un serveur MySQL mais cette fois-ci on va aller encore plus loin [...]

  31. brotherol dit :

    Merci…
    J’ai aussi ramé longtemps pour comprendre pourquoi le serveur ne voulais pas de mon datadir..je ne voulais pas démordre de mon problème de droit d’accès au fichier..!!
    Tu me sauves mon week end!
    Comme quoi il vaut mieux lire les commentaires.. c’était marqué dans my.conf

    A bientôt

    • Oncle Tom dit :

      Et un week-end de 3 jours de surcroît (j’espère pour toi).
      Et comme vu plus haut, effectivement on en arrive à lire les commentaires … une fois le problème résolu ;-)

    • Nuts dit :

      J’applique la méthode une dans un raid réseau (drdb) couplé à heartbeat. (cluste haute disponibilité)
      Sans problème ….

  32. Geo dit :

    Merci, encore merci … gros … Gros … GROS … MERCI.

  33. Bon tuto vraiment, il a aidé un de mes stagiaires… Quoiqu’il n’a pas encore fini de copier la base mysql existante sur le nouvel emplacement correctement. Il voit les tables mais pas les liens dans sa CRM (Vtiger)

Répondre

Balises HTML autorisées : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



Thème graphique par LeslyG, intégré par Oncle Tom.
Propulsé par WordPress, Blueprint et WP-LESS.