Publié par 6 commentaires

Changer l’emplacement des bases de données mysql sur debian

image_pdfimage_print

Bonjour à tous.

Aujourd’hui, on va voir comment changer l’emplacement des bdd mysql sur debian.

Sur la machine virtuelle qui héberge mon blog, j’ai 7go de SSD montés sur / et 20gb de montage NFS montés sur /srv/data.

L’espace commençait à manquer dans le ssd, j’ai donc décidé de déplacer les bases mysql dans le montage nfs.

Mon mysql est en vérité un mariadb mais je pense que ça marchera avec mysql.

J’ai eu du mal à trouver de la doc sur internet donc je vous partage ma méthode.

1 – Prérequis

    • Avoir une machine sous debian
    • Avoir un serveur mysql
    • Avoir un accès root sur la machine debian

2 – Déplacement de l’emplacement

Déjà, lancez un petit su pour passer en root.

On va créer le dossier de mysql.

Pour ceci, lancez mkdir /srv/data/mysql (j’ai choisi de créer mon dossier mysql dans /srv/data/ mais vous pouvez choisir l’emplacement que vous voulez).

Pour rendre mysql propriétaire de votre dossier, lancez chown mysql:mysql /srv/data/mysql.

Ensuite, il faut copier le contenu de votre dossier mysql dans votre nouveau dossier.

Pour connaître votre dossier mysql, il faut regarder le fichier /etc/mysql/mariadb.conf.d/50-server.cnf.

Une fois ouvert, notez la valeur de datadir (par défaut /var/lib/mysql).

On a tout ce qui nous faut pour copier les fichiers.

Positionnez vous dans votre datadir à l’aide de :

cd /var/lib/mysql

Stoppez le service mysql pour éviter une copie non correcte :
systemctl stop mysql

Puis, copiez les bases dans le nouveau dossier avec cette commande :

cp * /srv/data/mysql

Ça pourrait prendre du temps en fonction de la taille du dossier (5minutes pour 500mo chez moi).

On a copié le contenu, maintenant, il faut dire à mysql d’aller écrire dedans.

Réouvrez notre cher /etc/mysql/mariadb.conf.d/50-server.cnf  et modifiez la directive datadir par votre nouveau dossier (dans mon cas /srv/data/mysql).

Enregistrez et lancez la commande suivante pour redémarrer mysql :

systemctl start mysql

Maintenant, ouvrez mysql avec :

mysql -u root -p

et lancez :
CREATE DATABASE newdir_test;

puis :
exit

Ensuite, lancez :

ls /srv/data/mysql | grep newdir_test

Si newdir_test s’affiche, c’est que tout marche bien, vous pouvez supprimer l’ancien datadir de mysql avec la commande :

rm -rf /var/lib/mysql

Voilà, vous venez de déplacer vos bases de données mysql.

Si vous aimez mon travail, vous pouvez m’envoyer un tip et/ou partager mes articles.

Merci d’avoir lu cet article et à bientôt.

llaq.

  • Mastodon : framapiaf.org/@lelibreauquotidien
  • Twitter : twitter.com/librequotidien
  • Peertube : @lelibreauquotidien@tube.aquilenet.fr

 

6 réflexions au sujet de « Changer l’emplacement des bases de données mysql sur debian »

  1. Bonjour,

    Ou encore plus simple, et plus pratique. Déplacer comme indiquer le répertoire ou sont stockées les données. Faire ensuite un lien symbolique à l’emplacement d’origine. Cela évite de modifier le fichier de configuration (ce qui peut poser problème lors de mise à jour.)
    Ceci marche également avec PostGres.

    Bonne journée,
    S.

    1. Merci pour ton commentaire.
      Il est possible que ta suggestion soit intégrée dans l’article.
      Bonne journée.

  2. Bonjour,

    Quelques suggestions pour améliorer cette manipulation :
    – sudo su est un peu stupide (lire les pages de man pour comprendre); sudo -i ou su- mais pas les deux ensemble ;
    – avant de faire une copie physique des bases de données il faut impérativement arrêter le service mysql !. Sinon on risque d’avoir une copie incohérente ou incomplète. Idéalement il faudrait aussi avoir une copie logique des bases (dump SQL).

    1. Bonjour.
      Merci de ton commentaire,j’ai modifié l’article pour coller a tes conseils.
      Bonne journée.
      llaq.

  3. La sauvegarde est effectivement un préalable, mais tout le monde en fait régulièrement et les teste, n’est-ce pas ?

    Il faut préciser au début que le NFS n’est pas idéal pour une base de données, où le respect du fsync lors de l’écriture sur le disque est primordial. Sinon guette la corruption de données à la première saute de courant sur l’un ou l’autre serveur, et personne ne veut voir ça (même avec des sauvegardes).
    Pour les options de montage adéquates, voir les conseils des docs de MySQL (en bas de https://dev.mysql.com/doc/refman/8.0/en/disk-issues.html) et de de la doc de PostgreSQL (https://docs.postgresql.fr/12/creating-cluster.html#creating-cluster-nfs);

    1. D’accord,merci a toi,j’épingle ton commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Entrez Captcha ici : *

Reload Image