Astuces MYSQL


Si vous êtes débutant, je vous conseil de sauvegardez manuellement toute vos bases avant d'effectuer cette opération

Dans un environnement de test, vous ne pensez pas forcément à sauvegarder l'intégralité de vos bases. Alors, pour être sur les conservez, vous pouvez déplacer l'endroit où MySQL stocke les données.

Pour se faire, ouvrez un terminal

Stopper mysql :

/etc/init.d/mysql stop

Créer le nouveau répertoire qui accueillera les base de données. Pour l'exemple, on créera un répertoire MySQL dans votre home (~ remplace /home/<votreutilisateur>)

mkdir ~/MySQL

Par défaut, les données de MySQL sont stockées dans /var/lib/mysql. Donc rendez-y vous (pas besoin d'utiliser "sudo" pour ces commandes)

cd /var/lib/mysql
ls

Chez moi, cela donne :

-rw-r--r-- 1 root  root         0 2010-01-30 21:36 debian-5.1.flag
-rw-rw---- 1 mysql mysql 10485760 2010-01-30 22:22 ibdata1
-rw-rw---- 1 mysql mysql  5242880 2010-01-30 22:22 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 2010-01-30 21:36 ib_logfile1
drwxr-xr-x 2 mysql root      4096 2010-01-30 21:36 mysql
-rw------- 1 root  root         6 2010-01-30 21:36 mysql_upgrade_info
drwx------ 2 mysql mysql     4096 2010-01-30 21:37 phpmyadmin

Le dossier qui nous intéresse est "mysql". Le dossier "phpmyadmin" est là puisque j'ai installé phpMyAdmin. Les autres fichiers sont générés par MySQL et servent à sa gestion

On va donc copier l'intégralité du dossier "mysql" dans ~/MySQL Toujours dans /var/lib/mysql, faites (necessite de nouveaux sudo) :

cp -r mysql ~/MySQL

Maintenant, il faut changer le propriétaire et le groupe du dossier pour que seul MySQL puisse se servir du dossier

chow -R mysql:mysql ~/MySQL
Attention à ce que vous faites ! Vous pourriez changer tous les droits sur l'intégralité de vos dossiers/fichiers si vous vous tromper

Voilà ! Les fichiers sont à l'abri. Maintenant, il reste à reconfigurer MySQL pour qu'il utilise dorénavant le nouvel emplacement

Éditez le fichier /etc/mysql/my.conf

Remplacer

datadir = /var/lib/mysql

Par

datadir = /home/<votreutilisateur>/MySQL

On pourrait s'arrêter là, et redémarrer MySQL. Seulement, il est fort probable que vous ayez AppArmor. Si c'est le cas, celui là empêchera MySQL de redémarrer, car sa configuration ne correspondra pas à la nouvelle de MySQL

Éditez le fichier /etc/apparmor.d/usr.sbin.mysqld

Vous y trouverez quelque chose de similaire

# vim:syntax=apparmor
# Last Modified: Tue Jun 19 17:37:30 2007
#include <tunables/global>

/usr/sbin/mysqld {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/user-tmp>
  #include <abstractions/mysql>
  #include <abstractions/winbind>

  capability dac_override,
  capability sys_resource,
  capability setgid,
  capability setuid,

  network tcp,

  /etc/hosts.allow r,
  /etc/hosts.deny r,

  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/my.cnf r,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid w,
  /var/run/mysqld/mysqld.sock w,
}

Remplacer /var/lib/mysql par /home/<votreutilisateur>/MySQL/

[...]
  /var/log/mysql.err rw,
  /home/<votreutilisateur>/MySQL/ r,
  /home/<votreutilisateur>/MySQL/** rwk,
  /var/log/mysql/ r,
[...]

Maintenant, vous pouvez redémarrer MySQL !

/etc/init.d/mysql start

Sources :


Préambule

la plupart des utilisateurs créent de 2 à 3 partitions sur leur(s) installation(s)

  • / - une partition système
  • swap - une partition de de swap
  • /home - une partition réservée aux utilisateurs

L'intérêt de ce mode de partitionning est qu'en cas de re-installation, les données utilisateurs (données, profils, compte courrier, favoris internet, thème de bureau, etc.) sont sauvegardées et aussitôt exploitable. Ça n'est malheureusement pas le cas pour les bases de données MySql, et un utilisateur non averti, écrasera sans le savoir ses bases de données qui sont stockées sur /var/lib/mysql (et donc la parttion '/' système.

Il peut donc être intéressant pour cela de déplacer ses bases de données dans la partition /home.

Mise en place

Arrêter mysql :

sudo /etc/init.d/mysql stop

Déplacer le répertoire des bases de données :

sudo mv /var/lib/mysql /home/mysql

Le déplacement par 'mv' permet de ne pas modifier les droits originaux.

Créer un lien symbolique afin de ne pas "casser" les fichiers de configuration originel de MySql :

sudo ln -s /home/mysql /var/lib/mysql

Pour les versions d'Ubuntu utilisant Apparmor, il vous faut modifier le fichier de configuration mysql dans Apparmor.

Éditer /etc/apparmor.d/usr.sbin.mysqld

Trouver les deux lignes :

  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,

et modifier les en :

  /home/mysql/ r,
  /home/mysql/** rwk,

On relance la configuration d'Apparmor :

sudo /etc/init.d/apparmor reload

on relance MySql :

sudo /etc/init.d/mysql start

Et voilà.

  • utilisateurs/mcpeter/mysql_astuces.txt
  • Dernière modification: Le 04/08/2023, 16:29
  • par Amiralgaby