Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
utilisateurs:grigouille:brouillons:deplacer_mysql [Le 12/01/2017, 22:11] grigouille erreur dans mv |
utilisateurs:grigouille:brouillons:deplacer_mysql [Le 28/04/2018, 11:32] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ==== 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'' : | ||
+ | <code> | ||
+ | $ 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 | ||
+ | </code> | ||
+ | É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 : | ||
+ | <code>$ sudo service mysql stop</code> | ||
+ | [[:tutoriel:comment_modifier_un_fichier|On édite le fichier]] qui contient **datadir** : | ||
+ | <code> | ||
+ | datadir = /home/mysql | ||
+ | </code> | ||
+ | On suppose que l'ancienne valeur de **datadir** était **/var/lib/mysql**. | ||
+ | On déplace les données : | ||
+ | <code>$ sudo mv /var/lib/mysql /home</code> | ||
+ | |||
+ | Malheureusement cela ne suffit pas. | ||
+ | Le premier problème vient du fichier''/usr/share/mysql/mysql-systemd-start'' : | ||
+ | <code> | ||
+ | $ 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 | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Il faut donc créer le répertoire **/var/lib/mysql/mysql** avec les bons droits : | ||
+ | <code>$ sudo mkdir -p /var/lib/mysql/mysql | ||
+ | $ sudo chown -R mysql:mysql /var/lib/mysql | ||
+ | $ sudo chmod -R 700 /var/lib/mysql</code> | ||
+ | |||
+ | Il faut maintenant configurer [[:apparmor|AppArmor]]. D'après ce qui suit, nous devons modifier le fichier ''local/usr.sbin.mysqld'' : | ||
+ | <code> | ||
+ | $ tail /etc/apparmor.d/usr.sbin.mysqld -n3 | ||
+ | # Site-specific additions and overrides. See local/README for details. | ||
+ | #include <local/usr.sbin.mysqld> | ||
+ | </code> | ||
+ | [[:tutoriel:comment_modifier_un_fichier|Modifier le fichier]] ''/etc/apparmor.d/local/usr.sbin.mysqld'' en ajoutant : | ||
+ | <code> | ||
+ | # Allow data dir access | ||
+ | /home/mysql/ r, | ||
+ | /home/mysql/** rwk, | ||
+ | </code> | ||
+ | Rechargez : | ||
+ | <code>sudo service apparmor reload</code> | ||
+ | Redémarrez le service : | ||
+ | <code>sudo service mysql start</code> | ||
+ | Vérifiez le changement : | ||
+ | <code> | ||
+ | $ mysql -u root -p -e 'select @@datadir' | ||
+ | Enter password: | ||
+ | +--------------+ | ||
+ | | @@datadir | | ||
+ | +--------------+ | ||
+ | | /home/mysql/ | | ||
+ | +--------------+ | ||
+ | </code> | ||