Déplacer les bases mysql

Par défaut Mysql place les fichier dans /var/lib/mysql ce qui n'est pas du tout optimal si vous avez partitionner votre disque en laissant la place nécessaire au système pour les partitions systèmes et le maximum d'espace pour la partition utilisateur.

Dans l'article sur la configuration de nginx j'ai placé les données des sites WEB dans /home/www-data, je vous propose donc de déplacer les bases vers... /home/mysql.

Pour cela c'est très simple , il faut d'abord stopper la base de donnée mysql avec la commande 

/etc/init.d/mysql stop

Ensuite on copie les données de /var/lib/mysql vers  /home/mysql avec les commandes :

cd /var/lib/
cp -r -p mysql /home/

Puis on modifie le chemin dans la config de mysql en éditant le fichier /etc/mysql/mysql.conf.d/mysqld.cnf pour change la ligne définissant le "datadir" :

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /home/mysql
log-error       = /var/log/mysql/error.log

On relance avec :

/etc/init.d/mysql start

Et....ça plante !

[....] Starting mysql (via systemctl): mysql.serviceJob for mysql.service failed because the control process exited with error code.
See "systemctl status mysql.service" and "journalctl -xe" for details.
 failed!

donc on jette un coup d'oeil rapide au log avec :

cat /var/log/mysql/error.log
2018-11-13T17:57:44.802466Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.13) starting as process 22143
2018-11-13T17:57:44.915354Z 0 [Warning] [MY-010091] [Server] Can't create test file /home/mysql/shinobee.lower-test
2018-11-13T17:57:44.915408Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /home/mysql/ is case insensitive
mysqld: File './binlog.index' not found (OS errno 13 - Permission denied)
2018-11-13T17:57:44.956405Z 0 [ERROR] [MY-010119] [Server] Aborting
2018-11-13T17:57:45.006527Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.13)  MySQL Community Server - GPL.

"Permission denied" ? 

Pourtant avec "cp -p " il ne devrait pas y avoir de problème ! Et vous pouvez vérifier en  faisant ls -l des répertoire /home/mysql et /var/lib/mysql il n'y en a pas...

Sauf que apparmor nous joue un vilain tour !

En éditant le fichier /etc/apparmor.d/usr.sbin.mysqld vous verrez qu'il définit la liste des ressources accessibles par  le démon mysql.

il faudra changer  les lignes contenant /var/lib/mysql :

# Allow data dir access
  /home/mysql/ r,
  /home/mysql/** rwk,

et cette fois ça ira.

ne pas oublier de relancer 

/etc/init.d/mysql start

Après test et validation vous pouvez supprimer les fichiers d'origines.