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
Éventuellement ce fichier contient des directives !includedir. Il faut alors chercher dans ces répertoires le fichier qui contient datadir.
Dans la suite, nous allons déplacer les données dans /home/mysql.
Tout d'abord on arrête le service :
$ sudo service mysql stop
On édite le fichier qui contient datadir :
datadir = /home/mysql
On suppose que l'ancienne valeur de datadir était /var/lib/mysql. On déplace les données :
$ sudo mv /var/lib/mysql /home
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 créer le répertoire /var/lib/mysql/mysql avec les bons droits :
$ sudo mkdir -p /var/lib/mysql/mysql $ sudo chown -R mysql:mysql /var/lib/mysql $ sudo chmod -R 700 /var/lib/mysql
Il faut maintenant configurer AppArmor. D'après ce qui suit, nous devons modifier le fichier local/usr.sbin.mysqld :
$ tail /etc/apparmor.d/usr.sbin.mysqld -n3 # Site-specific additions and overrides. See local/README for details. #include <local/usr.sbin.mysqld>
Modifier le fichier /etc/apparmor.d/local/usr.sbin.mysqld en ajoutant :
# Allow data dir access /home/mysql/ r, /home/mysql/** rwk,
Rechargez :
sudo service apparmor reload
Redémarrez le service :
sudo service mysql start
Vérifiez le changement :
$ mysql -u root -p -e 'select @@datadir' Enter password: +--------------+ | @@datadir | +--------------+ | /home/mysql/ | +--------------+