Ceci est une ancienne révision du document !
Déplacer ses bases de données MySQL
L'emplacement des données de MySQL est indiqué dans la variable datadir qui se trouve dans le fichier my.cnf
.
Toutefois, il peut exister plusieurs fichiers my.cnf
:
$ mysqld --verbose --help | head -n13 | tail -n2 Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
Par défaut, il s'agit du fichier /etc/mysql/my.cnf
:
$ tail /etc/mysql/my.cnf # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
$ grep datadir /etc/mysql/mysql.conf.d/*.cnf /etc/mysql/mysql.conf.d/mysqld.cnf:datadir = /var/lib/mysql
Donc par défaut, les données sont dans /var/lib/mysql. On va mettre les données dans /home/mysql.
Tout d'abord on arrête le service :
$ sudo service mysql stop
On modifie datadir avec le nouvel emplacement :
$ grep datadir /etc/mysql/mysql.conf.d/*.cnf /etc/mysql/mysql.conf.d/mysqld.cnf:datadir = /home/mysql
On déplace les données :
$ sudo mv /var/lib/mysql /home/mysql
Malheureusement cela ne suffit pas.
Le premier problème vient du fichier/usr/share/mysql/mysql-systemd-start
:
$ head /usr/share/mysql/mysql-systemd-start -n25 | tail -n16 sanity () { if [ ! -r /etc/mysql/my.cnf ]; then echo "MySQL configuration not found at /etc/mysql/my.cnf. Please create one." exit 1 fi if [ ! -d /var/lib/mysql ] && [ ! -L /var/lib/mysql ]; then echo "MySQL data dir not found at /var/lib/mysql. Please create one." exit 1 fi if [ ! -d /var/lib/mysql/mysql ] && [ ! -L /var/lib/mysql/mysql ]; then echo "MySQL system database not found. Please run mysql_install_db tool." exit 1 fi }
Il faut donc faire créer le répertoire /var/lib/mysql/mysql :
$ sudo mkdir -p /var/lib/mysql/mysql $ sudo chown -R mysql:mysql /var/lib/mysql $ sudo chmod 700 /var/lib/mysql $ sudo chmod 750 /var/lib/mysql/mysql
Il faut maintenant configurer AppArmor.
et
Préambule
Avant de vous lancer voir la discussion ici http://forum.ubuntu-fr.org/viewtopic.php?id=1660321 en particulier:
cp my.cfn my.cfn.bak
ainsi si il y a un problème, il suffira simplement de restaurer le backup du fichier de conf. Mais cela n'arrivera pas, car lors d'une mise à jour le gestionnaire de paquets demande ce qu'il doit faire : remplacer, conserver, afficher les différences…
Si l'on a vraiment cette crainte, on ne touche pas au fichier my.cnf et on utilise le dossier conf.d qui est prévu pour y placer ses propres configurations.

Code « # Site-specific additions and overrides. See local/README for details.
#include <local/usr.sbin.mysqld></note> »
La plupart des utilisateurs créent de 2 à 3 partitions sur leur(s) installation(s) :
- / - une partition système
- swap - une partition de de swap
- /home - une partition réservée aux utilisateurs
L'intérêt de ce partitionnement est qu'en cas de réinstallation, les données utilisateurs (données, profils, compte courrier, favoris Internet, thème de bureau, etc.) sont sauvegardées et aussitôt exploitables. Ça n'est malheureusement pas le cas pour les bases de données MySql, et un utilisateur non averti, écrasera sans le savoir ses bases de données qui sont stockées sur /var/lib/mysql (donc dans la partition '/' système).
Il peut donc être intéressant pour cela de déplacer ses bases de données dans la partition /home.
Remarque importante : Il y a deux méthodes pour changer le dossier des données, soit par lien symbolique comme décrit ci-après, soit en modifiant le fichier de configuration my.cnf. Toutefois si les utilitaires de MySQL comme mysqldump sont utilisés, il faut préférer la méthode de modification du my.cnf, car les liens symboliques ne semblent pas pris en compte par ces utilitaires.
Mise en place
Arrêter MySQL :
sudo service mysql stop
Déplacer le répertoire des bases de données :
sudo mv /var/lib/mysql /home/mysql
Le déplacement par 'mv' permet de ne pas modifier les droits originaux.
Créer un lien symbolique afin de ne pas "casser" les fichiers de configuration originel de MySQL :
sudo ln -s /home/mysql /var/lib/mysql
S'assurer que l'utilisateur 'mysql' est bien le propriétaire de ce lien symbolique :
sudo chown -h mysql:mysql /home/mysql
Pour les versions d'Ubuntu utilisant Apparmor (notamment Ubuntu 10.04 LTS), il vous faut modifier le fichier de configuration MySQL dans Apparmor.
Ouvrir le fichier /etc/apparmor.d/usr.sbin.mysqld et trouver les deux lignes suivantes :
/var/lib/mysql/ r, /var/lib/mysql/** rwk,
et de les modifier en :
/home/mysql/ r, /home/mysql/** rwk,
On relance la configuration d'Apparmor :
sudo service apparmor reload
On relance MySql :
sudo service mysql start
Et voilà.