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
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.
Merci pour ton commentaire.
Il est possible que ta suggestion soit intégrée dans l’article.
Bonne journée.
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).
Bonjour.
Merci de ton commentaire,j’ai modifié l’article pour coller a tes conseils.
Bonne journée.
llaq.
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);
D’accord,merci a toi,j’épingle ton commentaire