28 votes

Comment déplacer les fichiers de données MySQL sur une partition différente ?

J'ai mon disque dur partitionné avec deux partitions, donc je peux facilement réinstaller Ubuntu et essayer différentes versions sans perdre les données de mon répertoire personnel. C'est configuré comme suit :

20 Go -> /     (racine)
180 Go -> /home 

Je fais beaucoup de travail de développement, donc j'ai mon dossier /var/www qui pointe vers /home/valorin/workspace.

Mais je veux faire la même chose avec mes fichiers de données MySQL, car ça m'agace de devoir à chaque fois réinstaller ma machine et faire un dump complet de SQL avant de restaurer toutes les bases de données pour pouvoir continuer à travailler.

Quelle est la meilleure façon de faire cela sans casser MySQL ?

29voto

sanmiguel Points 1235

Eh bien, en fait, il existe une réponse potentielle spécifique à Ubuntu à cette question.

Comme mentionné par le lien Gergoes, il s'agit essentiellement de modifier /etc/mysql/my.cnf et de définir une nouvelle valeur pour datadir = dans la section [mysqld]. C'est jusqu'à présent la partie non spécifique de la réponse.

En supposant que vous exécutez une version relativement récente d'Ubuntu, il est fort probable que vous ayez AppArmor installé par défaut, avec un profil pour /usr/sbin/mysqld en mode imposé. Ce profil par défaut ne prendra probablement pas en charge votre nouveau datadir.

Supposons que votre nouveau datadir soit /home/data/mysql.

Si vous ouvrez le fichier /etc/apparmor.d/usr.sbin.mysqld, vous trouverez parmi les règles ces deux lignes.

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

En supposant notre exemple ci-dessus, ils devront être remplacés ou (probablement préférable) complétés par ces deux lignes.

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

Avant de pouvoir démarrer notre serveur MySQL, avec son nouveau datadir, nous devrons également recharger explicitement notre nouveau profil apparmor.

$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

5voto

nelaaro Points 9188

Super utilisateur a de belles instructions étape par étape sur la façon de résoudre ce problème

Voici un autre ensemble d'instructions pour faire la même chose http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

Le voici de nouveau posté. Allez voter pour l'original si vous le pouvez sur Super utilisateur.

Après une certaine confusion générale concernant les autorisations, j'ai réalisé que le problème n'était pas que je n'avais pas mes autorisations et mes chemins corrects mais qu'AppArmor empêchait MySQL de lire et d'écrire dans le nouvel emplacement.

Voici ma solution:

Arrêtez d'abord MySQL pour éviter tout problème pendant la manipulation :

$ sudo stop mysql

Ensuite, déplacez tous les répertoires de bases de données vers leur nouvel emplacement :

$ sudo mv /var/lib/mysql/ /new-mysql-dir/

Ne déplacez pas les fichiers, ils seront générés par MySQL, déplacez simplement les dossiers (qui sont les bases de données).

Ensuite, demandez poliment à AppArmor d'autoriser MySQL à utiliser le nouveau dossier :

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld

ajoutez les lignes :

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

Ensuite, indiquez à MySQL que le datadir a été déplacé :

$ sudo vim /etc/mysql/my.cnf 

changez la ligne :

datadir=/var/lib/mysql

à :

datadir=/my-new-db-dir/

REMARQUE : Selon votre configuration de base de données, vous pourriez avoir besoin de modifier également innodb-data-home-dir, etc.

Ensuite, redémarrez AppArmor pour prendre en compte les nouveaux paramètres :

$ sudo /etc/init.d/apparmor restart

Et redémarrez MySQL en utilisant le nouveau datadir :

$ sudo start mysql

J'espère que cela vous aidera !

0voto

Jon Galloway Points 28243

Il ne s'agit pas vraiment d'Ubuntu spécifique. Néanmoins, voici quelque chose qui pourrait vous aider: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location

0voto

Vacilando Points 101

Pour ceux qui, comme moi, travaillent avec VirtualBox et ont besoin de déplacer le répertoire des données MySQL vers un dossier partagé sur le système hôte, suivez le tutoriel simple sur http://vacilando.org/en/article/moving-mysql-data-files-virtualbox-shared-folder

-1voto

Marin Marušić Points 16

Cela ne fonctionnera pas comme ça.

L'utilisateur mysql doit avoir le droit d'écrire dans le nouveau répertoire:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X