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

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/ |
+--------------+
  • utilisateurs/grigouille/brouillons/deplacer_mysql.1484255515.txt.gz
  • Dernière modification: Le 12/01/2017, 22:11
  • par grigouille