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 dans le fichier /etc/mysql/mysql.conf.d/mysqld.cnf :
$ 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 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. 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>
Modifions donc le fichier /etc/apparmor.d/local/usr.sbin.mysqld :
$ cat /etc/apparmor.d/local/usr.sbin.mysqld # Site-specific additions and overrides for usr.sbin.mysqld. # For more details, please see /etc/apparmor.d/local/README. # 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/ | +--------------+