Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
utilisateurs:grigouille:brouillons:deplacer_mysql [Le 12/01/2017, 22:01] – select @@datadir grigouilleutilisateurs:grigouille:brouillons:deplacer_mysql [Le 20/01/2017, 21:07] (Version actuelle) – plus général pour my.cnf grigouille
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>